1

我希望只返回一天 - 所以如果同一天有 2 个事件,它只会返回其中一个事件。选择哪个事件是任意的。我认为可行的查询是:

SELECT DISTINCT day(events.event_start_date),events.event_id
FROM scheduled_events
JOIN events ON (
scheduled_events.event_id = events.event_id
)
WHERE scheduled_events.user_id = 123
AND MONTH( events.event_start_date ) = 06
AND YEAR( events.event_start_date ) = 2012

表:事件

+------------+--------------------+
|  event_id  |  event_start_date  |
+------------+--------------------+
|     1      |     2012-06-06     |
|     2      |     2012-06-06     |
|     3      |     2012-06-07     |
+------------|--------------------|

表:scheduled_events

+------------+-----------+
|  event_id  |  user_id  |
+------------+-----------+
|     1      |    123    |
|     2      |    123    |
|     3      |    123    |
+------------|-----------|

我希望查询返回 id 为 3 和(12)的事件。

4

1 回答 1

1

您使用的DISTINCT关键字指的是整行,即您的所有列。因此,您每天会获得多个结果。要每天只给出一个结果,你应该GROUP BY重视这个值。

SELECT day(events.event_start_date),events.event_id
FROM scheduled_events
JOIN events ON (
scheduled_events.event_id = events.event_id
)
WHERE scheduled_events.user_id = 123
AND MONTH( events.event_start_date ) = 06
AND YEAR( events.event_start_date ) = 2012
GROUP BY day(events.event_start_date)

这将在 mysql 中工作,并且列出的事件将是您要求的任意事件。但是其他一些 SQL 方言会禁止这样做,即使使用 mysql 也可能存在您想要可重现行为的情况。在这些情况下,您也应该使用聚合函数event_id例如MIN(event_id).

于 2012-07-11T10:44:54.810 回答