数据表如下所示:
我想查询不同id在当前行日期之前最后一个不为0的数量,例如我需要查17号和18号的数据,查询示例如下所示:
请教下,这种SQL应该怎么写?
数据表如下所示:
我想查询不同id在当前行日期之前最后一个不为0的数量,例如我需要查17号和18号的数据,查询示例如下所示:
请教下,这种SQL应该怎么写?
SELECT id, date, number
FROM (
SELECT id, date, number,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn
FROM your_table
WHERE date <= '2023-08-18' -- 替换为你想要查询的日期
) subquery
WHERE rn = 1 AND number <> 0;
这个查询首先在子查询中按照id分组,并按照date降序排序。然后,使用ROW_NUMBER()窗口函数为每个分组中的行分配一个行号。最后,在外部查询中,选择行号为1且number不为0的行。
请注意,你需要将your_table替换为你实际的表名,并将'2023-08-18'替换为你想要查询的日期。