0

私のデータベースレコード

SELECT * FROM (
      SELECT t1.eventId,t1.start_date,t1.end_date, COUNT(*) pos FROM events t1
        LEFT JOIN events t2 ON t1.start_date = t2.start_date AND t1.eventId <= t2.eventId
        WHERE t1.start_date BETWEEN  '2012-12-18' AND '2012-12-24'
      GROUP BY
        t1.eventId,t1.start_date
      ORDER BY 
        t1.start_date,pos ASC
      ) t
    WHERE
      pos <= 3;

ここに画像の説明を入力

開始日 2012-12-21 と 2012-12-24 が存在しない理由

start_date が存在しない場合は、null または空の値が必要です

注:DBには21と24のレコードはありませんが、クエリには空の値が必要です

4

2 に答える 2

0

以下のクエリを使用して、結果を教えてください

SELECT * FROM (
      SELECT t1.eventId,t1.start_date,t1.end_date, COUNT(*) pos FROM events t1
        LEFT JOIN events t2 ON t1.start_date = t2.start_date AND t1.eventId <= t2.eventId
        WHERE t1.start_date >=  '2012-12-18' AND  t1.start_date <='2012-12-24'
      GROUP BY
        t1.eventId,t1.start_date
      ORDER BY 
        t1.start_date,pos ASC
      ) t
    WHERE
      pos <= 3;
于 2012-12-18T08:13:49.867 に答える
0

代わりに HAVING を使用して外側のクエリを削除できます。

SELECT t1.eventId,t1.start_date,t1.end_date, COUNT(*) pos FROM events t1
LEFT JOIN events t2 ON t1.start_date = t2.start_date AND t1.eventId <= t2.eventId
WHERE t1.start_date BETWEEN  '2012-12-18' AND '2012-12-24'
GROUP BY t1.eventId,t1.start_date
HAVING COUNT(*) <= 3
ORDER BY t1.start_date,pos ASC;

次の行の挿入に注意してください。

HAVING COUNT(*) <= 3

これは、外側のクエリが行っていることと論理的に同等です

于 2012-12-18T08:19:17.720 に答える