0

こんにちは、SQL の問題があります。結果を取得していますが、最初の 15 分も取得したかったのです。

これが私の現在のクエリです:

SELECT CONCAT(CAST(DATE_FORMAT(date_added, '%h') AS CHAR(2)), ':',  
CAST(DATE_FORMAT(date_added, '%m') AS CHAR(2))) timer, 
COUNT(*) ctrRes from tbl1 WHERE id = 1 AND cat = 2
GROUP BY ( 3 * HOUR( date_added ) + FLOOR( MINUTE( date_added ) / 15 ))

サンプル結果:

タイマー | ctrRes

01:28 | 1

01:44 | 22

02:14 | 253

02:29 | 238

空の結果に関係なく、00:15 から始まるレコードを取得する方法はありますか。ありがとう。

4

1 に答える 1

0

そのタイムスロットに何かがあるかどうかに関係なく、レコードを返したいようです。まあ、MySQL が返すものがあるはずです。SQL はデータを生成するためではなく、データを取得するために使用されるため、データが存在しない場合は取得できません。したがって、データを取得できるように、何らかの方法でデータを作成する必要があります。

このデータは、クエリごとに一時的に作成することも、実際のテーブルでデータを具体化することもできます。このクエリを頻繁に実行する場合は、データを実体化することをお勧めします。日付を作成する例がhttps://gist.github.com/johngrimes/408559にあります。日付の代わりに時刻を生成するようにカスタマイズできます。

次に、結果は次のようになります。

select * from TimeTable left join tbl1 on ... where <some range criteria>
于 2013-07-23T18:17:13.820 に答える