Tableau中实现数据检查(价格执行日期顺序不能颠倒)

把同一"型号+品牌"的“价格执行日期”维护错误的找出来。同一"型号+品牌"后维护“价格执行日期”必须大于之前维护的“价格执行日期”

img


序号 型号+供方 型号 供方 价格执行日期 价格 创建日期
1 DZ001华为 DZ001 华为 2019/12/20 2210 2020/1/10
2 DZ002苹果 DZ002 苹果 2019/12/20 1,800 2020/1/10
3 DZ002苹果 DZ002 苹果 2020/12/20 1900 2020/5/10
4 DZ002苹果 DZ002 苹果 2020/6/10 2000 2020/5/10
5 DZ003小米 DZ003 小米 2019/10/10 1,250 2021/10/7
6 DZ003小米 DZ003 小米 2020/10/10 1,360 2021/10/7
7 DZ004红米 DZ004 红米 2020/12/20 1500 2021/10/7
8 DZ004红米 DZ004 红米 2020/1/10 1300 2021/10/9
9 DZ004红米 DZ004 红米 2019/10/10 1,100 2021/10/10
10 DZ001OPPO DZ001 OPPO 2019/12/20 2,310 2021/10/10
11 DZ001vivo DZ001 vivo 2019/12/20 2,310 2021/10/10

import pandas as pd
import pandasql as ps 

data = [
[1, 'DZ001华为', 'DZ001', '华为', '2019/12/20', 2210, '2020/1/10'], 
[2, 'DZ002苹果', 'DZ002', '苹果', '2019/12/20', 1800, '2020/1/10'], 
[3, 'DZ002苹果', 'DZ002', '苹果', '2020/12/20', 1900, '2020/5/10'], 
[4, 'DZ002苹果', 'DZ002', '苹果', '2020/6/10', 2000, '2020/5/10'], 
[5, 'DZ003小米', 'DZ003', '小米', '2019/10/10', 1250, '2021/10/7'], 
[6, 'DZ003小米', 'DZ003', '小米', '2020/10/10', 1360, '2021/10/7'], 
[7, 'DZ004红米', 'DZ004', '红米', '2020/12/20', 1500, '2021/10/7'], 
[8, 'DZ004红米', 'DZ004', '红米', '2020/1/10', 1300, '2021/10/9'], 
[9, 'DZ004红米', 'DZ004', '红米', '2019/10/10', 1100, '2021/10/10'], 
[10, 'DZ001OPPO', 'DZ001', 'OPPO', '2019/12/20', 2310, '2021/10/10'], 
[11, 'DZ001vivo', 'DZ001', 'vivo', '2019/12/20', 2310, '2021/10/10']
]
columns =  ['序号','型号供方', '型号', '供方', '价格执行日期', '价格', '创建日期']
df = pd.DataFrame(data = data, columns = columns)
df['newD'] = pd.to_datetime(df['价格执行日期'])

fun = lambda q: ps.sqldf(q, globals())

q = """
SELECT LL.* FROM df LL 
INNER JOIN (
SELECT 型号供方,min(序号) 序号
FROM df L WHERE (SELECT COUNT(1) FROM df R WHERE L.型号供方=型号供方 AND 序号>L.序号 AND newD<L.newD) >0
GROUP BY 型号供方
) RR
ON RR.型号供方=LL.型号供方
WHERE LL.序号>=RR.序号
;
"""
res = fun(q)
print(res[columns])