id 用电量 日期
求 用电量连续7天大于150
请问这条sql应该怎么写,求sql,谢谢
基于new bing的编写参考:
SELECT id, MIN(日期) as 开始日期, MAX(日期) as 结束日期
FROM (
SELECT id, 日期, 用电量, DATEADD(day, - ROW_NUMBER() OVER (PARTITION BY id ORDER BY 日期), 日期) AS dif
FROM 表名
WHERE 用电量 > 150
) t
GROUP BY id, dif
HAVING COUNT(*) >= 7
此查询语句利用了 ROW_NUMBER() 函数和日期差值 dif 来识别连续的七天时间段。该查询语句会返回每个连续的七天时间段的 id, 开始日期和结束日期。
我的思路是用每个日期的用电量与连续7天的用电量总和进行比较,楼上的窗口函数也可以,但是希望提供一些测试数据
SELECT t1.[日期], t1.[用电量], SUM(t2.[用电量]) AS [7天用电量]
FROM test t1
INNER JOIN test t2
ON t2.[日期] BETWEEN t1.[日期] AND DATEADD(day, 6, t1.[日期])
GROUP BY t1.[日期], t1.[用电量]
HAVING SUM(t2.[用电量]) > 150
ORDER BY t1.[日期]
你可以使用 SQL 语句中的窗口函数和子查询进行处理,具体步骤如下:
SELECT id, SUM(用电量) OVER (PARTITION BY 日期 ORDER BY 日期 ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS 近7天用电量总和, 用电量, 日期
FROM your_table_name;
SELECT *
FROM (
SELECT id, SUM(用电量) OVER (PARTITION BY 日期 ORDER BY 日期 ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS 近7天用电量总和, 用电量, 日期
FROM your_table_name
) sub
WHERE 近7天用电量总和 > 150;
以上 SQL 语句中,your_table_name
表示你的数据表名,id
、用电量
和 日期
分别表示该表中的对应列名。