1

カレンダーでイベントを追跡する MySQL データベースがあります。関係するすべての日付を含む calendar というテーブルがあります。私の仕事では、特定の価値を持つ契約があります。簡単にするために、1 と 2 のみを使用します。これらのコントラクトには、開始日と終了日があります。カレンダー全体のすべての契約を取得し、各日の契約値を合計したいと考えています。

これまでのところ、私は持っています:

SELECT calendar.datefield AS DATE, contract.time_slots AS Slots_taken
FROM contract
RIGHT JOIN calendar ON calendar.datefield
BETWEEN contract.start_time
AND contract.end_time
LIMIT 600 , 30

これは私が欲しいものをほとんど与えてくれます。このクエリは、次のようなテーブルを生成します。

    DATE    |  Slots_taken
------------|--------------
2013-08-29  |     1
2013-08-30  |     1
2013-08-31  |     1
2013-09-01  |     1
2013-09-01  |     2
2013-09-02  |     1
2013-09-02  |     2
2013-09-03  |     1
2013-09-03  |     2

しかし、ここで私は繰り返しの日付を取得しています。その日付の値の合計で、日付ごとに 1 つの行のみが必要です。したがって、次のようになります。

    DATE    |  Slots_taken
------------|--------------
2013-08-29  |     1
2013-08-30  |     1
2013-08-31  |     1
2013-09-01  |     3
2013-09-02  |     3
2013-09-03  |     3
4

3 に答える 3

1

単純な tSQL の場合は、SUM() と GROUP BY をお勧めします。

SELECT calendar.datefield AS DATE, sum(contract.time_slots) AS Slots_taken
FROM contract
RIGHT JOIN calendar ON calendar.datefield
BETWEEN contract.start_time
AND contract.end_time
LIMIT 600 , 30
GROUP BY calendar.datefield 

「プレーンな」tSQLではないため、LIMITをむき出しにする

それが少し役立つことを願っています

編集

これはどう:

 SELECT DATE, SUM(Slots_taken) AS Slots_taken
 FROM (
   SELECT calendar.datefield AS DATE, contract.time_slots AS Slots_taken
   FROM contract
   RIGHT JOIN calendar ON calendar.datefield
   BETWEEN contract.start_time
   AND contract.end_time
   LIMIT 600 , 30) A
 GROUP BY calendar.datefield

繰り返しますが、これはかなり「プレーン」な tSQL であり、これはクエリのジョークです :)

于 2013-09-10T15:33:22.033 に答える