2012-07-11 187 views
1

我期待只返回一天 - 所以如果在同一天有兩個事件,它將只返回其中一個事件。選擇哪個事件是任意的。我本以爲這工作查詢:如何從加入日期中選擇不同日期

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和(1 2)。

回答

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,也可能會出現需要重現行爲的情況。在這些情況下,您應該使用aggregate function以及event_id,例如。 MIN(event_id)

+0

哇,我現在覺得很傻。這工作完美!我嘗試** ORDER BY **而不是** GROUP BY **。非常感謝您的快速和正確的答案! – Jay 2012-07-11 10:48:39

相關問題