2011-01-25 9 views
2

記録の数で日のリストを毎日集計する必要があります。 を1日ごとにグループ化します。 ここに私の問題があります: 真夜中後に記録されたすべてのデータは翌日になります: 私は前日に行く必要があります。アクセス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 

をしかし、彼らは前日に「見える」ように、あなたは何をしたいのか おかげ

答えて

2

BY GROUPは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句を修正し、それだろう「今日」

+0

1によるグループの必要はありませんあなたは 'WHERE' – Andomar

+0

に一日だけ選択した場合の質問は、私は、その範囲を変更することができると思います「毎日のために」と言います。安全に遊ぶ。 – RichardTheKiwi

0

この作品は、ウィルのように翌日午前5時まで午前5時でグループ?私は最初にシフトし、シフトして丸めた日付でグループ化して集計しようとしています。関心のある日付範囲をフィルタリングするには、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))) 
関連する問題