3

販売数を数え、日付ごとに合計販売額を簡単に合計する必要があります。しかし、カーブのピッチは - 「カットオフ」が真夜中ではなく午後 6 時である必要があります。

前日18時~当日18時まで。

私を投げているのは「グループ化」です。私のカウントは、「午後 6 時」の情報ではなく、実際の日付のみを取得しているだけです。

Sort30   Day30      Total                 Counter
-------- ---------- --------------------- -----------
20120810 08/10/2012 675.32                9
20120809 08/09/2012 1314.68               16

クエリ:

SELECT top 30 CONVERT(VARCHAR(8), chickendate, 112) AS varSort30, 
CONVERT(VARCHAR(10), chickendate, 101) AS varDay30,
SUM(CAST(transAmount AS money)) AS varTotal, 
Count(chickendate) AS varCounter
FROM CHICKEN
WHERE 
    (chickendate >= dateadd(hour, 18, dateadd(day, datediff(day, 0, chickendate), -1))  AND 
    chickendate < dateadd(hour, 18, dateadd(day, datediff(day, 0, chickendate), 0))) 
GROUP BY CONVERT(VARCHAR(8), chickendate, 112), 
    CONVERT(VARCHAR(10), chickendate, 101)
ORDER BY CONVERT(VARCHAR(8), chickendate, 112) DESC

ぐるぐる回ると、何かが私の顔を見つめているのを感じます。ありがとう。

4

3 に答える 3

4

私の論理が正しければ、正しい結果が得られるはずです。

SELECT TOP 30
    CONVERT(VARCHAR(8), modifiedChickenDate, 112) AS varSort30, 
    CONVERT(VARCHAR(10), modifiedChickenDate, 101) AS varDay30,
    SUM(CAST(transAmount AS money)) AS varTotal, 
    COUNT(modifiedChickenDate) AS varCounter
FROM (
    SELECT
        transAmount,
        DATEADD(HOUR, 6, chickendate) AS modifiedChickenDate
    FROM CHICKEN
) sub
GROUP BY
    CONVERT(VARCHAR(8), modifiedChickenDate, 112) AS varSort30, 
    CONVERT(VARCHAR(10), modifiedChickenDate, 101) AS varDay30,
ORDER BY
    CONVERT(VARCHAR(8), modifiedChickenDate, 112) AS varSort30
于 2012-08-10T17:02:43.570 に答える
1

Chickendate が単なる DATE ではなく DATETIME である場合は、次を使用できます。

GROUP BY CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101)

日付を 6 時間進めて (カットオフを午前 0 時または午後 6 時より 6 時間早く)、その年の日にグループ化します。これは、時間情報を保存している場合にのみ機能しますが、そうであるかどうかはわかりません。必要なテーブルのスキーマを投稿します。しかし、私はあなたが探していると思います...

SELECT TOP 30 CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101) as Date
        , SUM(CAST(transAmount as money)) AS Total
        , Count(*) as Counter
    FROM Chicken
    GROUP BY CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101)
    ORDER BY CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101) DESC
于 2012-08-10T17:03:06.800 に答える
0

どうですか:

GROUP BY CONVERT(VARCHAR(8), dateadd(hour, 6, chickendate), 112)

So'2012-08-09 18:00:00'は によってグループ化され20120810、によって'2012-08-09 17:59:59'グループ化され20120809ます。

于 2012-08-10T17:02:40.120 に答える