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 或空值

注意:我的数据库中没有 21 和 24 的记录,但我的查询中需要一个空值

4

2 回答 2

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 回答
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 回答