3

毎日の生産性を示す Oracle 11g SQL レポートを作成する必要があります。24 時間に出荷されたユニット数です。各ピリオドは午前 6 時に開始し、翌日の午前 5 時 59 分に終了します。

この 24 時間の期間を表示するには、どうすれば結果をグループ化できますか? 日ごとにグループ化しようとしましたが、1 日は 00:00 から 23:59 であるため、結果は不正確です。

結果は過去 2 か月分をカバーします。

どうもありがとう。

4

4 に答える 4

2
group by trunc(your_date - 1/4)
于 2013-04-24T16:25:47.340 に答える
2

オラクルでは日は整数であるため、午前 6 時は 1 日の 0.25 になります。

select 
trunc(date + 0.25) as period, count(*) as number
from table
group by trunc(date + 0.25 )

現時点では、試着するオラクルはありません。

于 2013-04-24T16:29:30.873 に答える
0

さて、計算された日付でグループ化できます。そのため、日付に 6 時間を追加してグループ化すると、技術的に日付が正しくグループ化され、正しい結果が得られます。

于 2013-04-24T16:25:03.883 に答える
0

テーブルに列などがあると仮定するとunits、おそらく次のようになります。

SQL フィドル

SELECT 
  TRUNC(us.shipping_datetime - 0.25) + 0.25 period_start
, TRUNC(us.shipping_datetime - 0.25) + 1 + (1/24 * 5) + (1/24/60 * 59) period_end
, SUM(us.units) units
FROM units_shipped us
GROUP BY TRUNC(us.shipping_datetime - 0.25)
ORDER BY 1

これは、各日付から単純に 6 時間 (1 日の 0.25) を差し引いたものです。時刻が午前 6 時より前の場合、減算により午前 0 時より前になり、結果の値が切り捨てられると (時刻要素が削除され、午前 0 時の日付が返されます)、前日のグループ内に収まります。

結果

|                 PERIOD_START |                   PERIOD_END | UNITS |
-----------------------------------------------------------------------
| April, 22 2013 06:00:00+0000 | April, 23 2013 05:59:00+0000 |     1 |
| April, 23 2013 06:00:00+0000 | April, 24 2013 05:59:00+0000 |     3 |
| April, 24 2013 06:00:00+0000 | April, 25 2013 05:59:00+0000 |     1 |

SELECT の動的な計算は、結果を読みやすくするためのものです。units上に列がない場合SUM()、つまり各行が 1 つの単位を表している場合は、COUNT(*)代わりに置き換えます。

于 2013-04-24T22:03:35.593 に答える