把同一"型号+品牌"的“价格执行日期”维护错误的找出来。同一"型号+品牌"后维护“价格执行日期”必须大于之前维护的“价格执行日期”
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])