关于#数据库#的问题:id 用电量 日期求 用电量连续7天大于150请问应该怎么写

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 语句中的窗口函数和子查询进行处理,具体步骤如下:

  1. 使用窗口函数计算出每个日期的用电量总和,同时使用子查询将最近七天的用电量求和得到一个子表。
SELECT id, SUM(用电量) OVER (PARTITION BY 日期 ORDER BY 日期 ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS7天用电量总和, 用电量, 日期 
FROM your_table_name;
  1. 在上一步的基础上,筛选出近7天用电量总和大于150的记录,即可得到结果。
SELECT *
FROM (
    SELECT id, SUM(用电量) OVER (PARTITION BY 日期 ORDER BY 日期 ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS7天用电量总和, 用电量, 日期 
    FROM your_table_name
) sub
WHERE7天用电量总和 > 150;

以上 SQL 语句中,your_table_name 表示你的数据表名,id用电量日期 分别表示该表中的对应列名。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^