-1

SQL テーブルに次のデータがあります。

 Tran_Date          |  Amount 
2013-05-01 20:09:49 |  50.00
2013-05-02 04:09:49 |  50.00
2013-05-02 04:30:49 |  10.00
2013-05-02 20:09:49 | 500.00
2013-05-03 03:09:49 |   0.00

今日と翌日の午前5時までに金額を分ける方法は?結果は次のようになります。結果を取得する目的は、お店が午前 8 時に開店し、翌日の午前 5 時に閉店するためです。午前 8 時から午前 12 時までの合計を計算し、午前 12 時から午前 5 時までの合計を 1 日の売上として計算する必要があります。

    Tran_Date       |  Amount |  Amount_Before_5am
2013-05-01 20:09:49 |  50.00  |       60.00
2013-05-02 20:09:49 |  500.00 |        0.00

皆さんが私を助けてくれることを願っています。次のコードをほぼ1週間試していましたが、何も得られませんでした。それは可能ですか?ありがとう

select CAST(DATEADD(hh, -5,c.TRAN_DATE) AS DATE),
       CAST(c.TRAN_DATE as DATE),
       sum(c.Amount)
from TRAN_TABLE 
group by CAST(DATEADD(hh, -5,c.TRAN_DATE) AS DATE),
         CAST(c.TRAN_DATE as DATE)
4

3 に答える 3

1

集計を使用すると、これを効率的に行うことができます。

http://sqlfiddle.com/#!3/615d5/2

SELECT BusinessDay = CAST(DATEADD(hh,-5,TranDate) AS DATE)
      ,Amount = SUM(CASE WHEN DATEPART(hh,TranDate) >  4 THEN Amount ELSE 0 END)
      ,Amount_Before_5am = 
       SUM(CASE WHEN DATEPART(hh,TranDate) <= 4 THEN Amount ELSE 0 END)
FROM Table
GROUP BY CAST(DATEADD(hh,-5,TranDate) AS DATE)
于 2013-05-22T16:11:47.773 に答える
0
SELECT    Tran_Date
    , Amount
    , Amount_Before_5am = SUM(CASE WHEN CAST('Tran_Date' AS TIME) <'05:00:00' THEN Amount ELSE 0 END)
FROM TRAN_TABLE 
GROUP BY Tran_Date, Amount

集計しているかどうかを質問から判断するのは困難です。もしそうなら、これはうまくいくはずです。集計していない場合は、SUM() を外してください。他の人が指摘したように、DATEPART比較を使用することもできます。

ああ、おそらく日ごとに合計された金額も欲しかったのですか?それを SUM() でラップし、Group By 句から Amount を削除するだけです。

于 2013-05-22T16:09:56.770 に答える