Sql 如何将偏移量减去通过递归CTE生成的日期?
如果没有特定日期的数据,下面的查询使用递归CTE生成日期。我想将前一天7:15开始到第二天7:15的每日停机总时间分组,并在一个月内完成。这个查询很好,但是我需要从每天减去DATEADDminute,-7*60+15Sql 如何将偏移量减去通过递归CTE生成的日期?,sql,sql-server,reporting-services,sql-server-ce,Sql,Sql Server,Reporting Services,Sql Server Ce,如果没有特定日期的数据,下面的查询使用递归CTE生成日期。我想将前一天7:15开始到第二天7:15的每日停机总时间分组,并在一个月内完成。这个查询很好,但是我需要从每天减去DATEADDminute,-7*60+15 WITH dates as ( SELECT CONVERT(date, 'Anydate') as dte UNION ALL SELECT DATEADD(day, 1, dte) FROM dates WHERE d
WITH dates as (
SELECT CONVERT(date, 'Anydate') as dte
UNION ALL
SELECT DATEADD(day, 1, dte)
FROM dates
WHERE dte < 'Anydate + 1 month later'
)
SELECT CONVERT(datetime,d.dte), ISNULL(SUM(long_stop_minutes), 0) AS downtime
FROM dates d LEFT JOIN
long_stops_table b
ON CAST(t_stamp as DATE) = d.dte AND Type = 'downtime'
GROUP BY CONVERT(datetime, d.dte)
ORDER BY CONVERT(datetime, d.dte) ASC;
只需减去适当的时间单位。这里有一个方法:
SELECT d.dte,
COALESCE(SUM(lst.long_stop_minutes), 0) AS downtime
FROM dates d LEFT JOIN
long_stops_table lst
ON CONVERT(date, DATEADD(minute, -(7 * 60 + 15), lst.t_stamp) = d.dte AND
lst.Type = 'downtime'
GROUP BY d.dte
ORDER BY d.dte ASC;
我认为没有理由将dates.dte转换为datetime,所以我只是删除了转换。非常感谢Gordon!这是正确的。我们在这里有非常独特的做事方式。