访问SQL查询 - 按日期范围分组(午夜问题后)

时间:2011-01-25 22:04:47

标签: group-by sql

需要使用#次录音填充日期列表 按天分组的每一天。 这是我的问题: 午夜后记录的所有数据将进入第二天: 我需要它去前一天。

我试过了:

SELECT RecordedOnDate, COUNT(RecordedOnDate) AS RowCount, COUNT(SongID) AS [Total Amount]
FROM InfoTable
WHERE (RecordedOnDate > DateAdd('h', 5, #1/23/2011#)) AND (RecordedOnDate < DateAdd('h', 5, #1/24/2011#))
GROUP BY RecordedOnDate
ORDER BY RecordedOnDate DESC

但不能GROUP BY 感谢

2 个答案:

答案 0 :(得分:2)

您要做的是将时间偏移5小时,以便它们在前一天“显示”。

SELECT
    DateAdd('h', -5, RecordedOnDate) RecordedOnDate,
    COUNT(RecordedOnDate) AS RowCount,
    COUNT(SongID) AS [Total Amount]
FROM InfoTable
WHERE (RecordedOnDate > DateAdd('h', 5, #1/23/2011#)) AND (RecordedOnDate < DateAdd('h', 5, #1/24/2011#))
GROUP BY DateAdd('h', -5, RecordedOnDate)
ORDER BY RecordedOnDate DESC

根据需要修复您的WHERE子句,但它会在第二天凌晨5点到凌晨5点分组为“今天”

答案 1 :(得分:0)

这会有用吗?我试图先移动然后分组并按移位和舍入日期聚合。添加/更新WHERE子句以过滤感兴趣的日期范围。

;WITH Shifted(sday, smonth, syear)
AS (
  SELECT 
    DatePart(day, DateAdd('h', -5, RecordedOnDate)) sday,
    DatePart(month, DateAdd('h', -5, RecordedOnDate)) smonth,
    DatePart(year, DateAdd('h', -5, RecordedOnDate)) syear
  FROM Table
)
SELECT 
  -- recreate the date
  DateAdd(day, sday - 1, DateAdd(month, smonth - 1, DateAdd(Year, syear - 1900, 0))) RD,
  -- aggregate the count for the shifted date
  COUNT(*)
FROM Shifted
GROUP BY 
  DateAdd(day, sday - 1, DateAdd(month, smonth - 1, DateAdd(Year, syear - 1900, 0)))