Mysql 我的SQL唯一值-意外结果

Mysql 我的SQL唯一值-意外结果,mysql,sql,select,group-by,sql-order-by,Mysql,Sql,Select,Group By,Sql Order By,我有一个表tblSchedule,下面是其中的值 INSERT INTO tblSchedule (`scheduleID`, `eventID`, `price`, `eventDate`) VALUES (1, 1, 150, '2013-04-20 00:00:00'), (2, 1, 100, '2013-04-15 00:00:00'), (3, 2, 80, '2013-04-18 00:00:00'), (4, 3, 120, '2013-04-26 00:00:00'), (

我有一个表tblSchedule,下面是其中的值

INSERT INTO tblSchedule (`scheduleID`, `eventID`, `price`, `eventDate`) VALUES 
(1, 1, 150, '2013-04-20 00:00:00'),
(2, 1, 100, '2013-04-15 00:00:00'),
(3, 2, 80, '2013-04-18 00:00:00'),
(4, 3, 120, '2013-04-26 00:00:00'), 
(5, 3, 140, '2013-04-22 00:00:00'),
(6, 2, 100, '2013-04-22 00:00:00');
我想获得由eventDate ASC排序的唯一事件
我尝试了以下查询,但这给出了错误的价格值和正确的事件日期

SELECT MIN(eventDate) as minEventDate, eventId, price
FROM tblSchedule
GROUP BY eventID
ORDER BY minEventDate


有谁能告诉我这里发生了什么以及正确查询的详细情况吗?

首先,您应该为每个
eventID
找到
MIN(EventDate)
,然后使用JOIN从原始表中找到包含这些
eventID
MIN(EventDate)
的行

SELECT * FROM tblSchedule
JOIN
 ( SELECT MIN(eventDate) as minEventDate, 
          eventId
        FROM tblSchedule
   GROUP BY eventID
 ) as T on tblSchedule.eventID=t.EventId
           AND
           tblSchedule.eventDate=t.minEventDate

ORDER BY eventDate  

您可以为此使用时间戳

SELECT * FROM `tblschedule` ORDER BY TIMESTAMP( eventDate )

而不是*您可以放置任何要返回的列

试试这个:

SELECT eventDate, eventId, price 
FROM (SELECT eventDate, eventId, price
      FROM tblSchedule
      ORDER BY eventId, eventDate
     ) AS A 
GROUP BY eventId;
检查

输出

|                    EVENTDATE | EVENTID | PRICE |
|------------------------------|---------|-------|
| April, 15 2013 00:00:00+0000 |       1 |   100 |
| April, 18 2013 00:00:00+0000 |       2 |    80 |
| April, 22 2013 00:00:00+0000 |       3 |   140 |

为什么我们必须进行如此复杂的SQL查询以获得更简单的结果?它不应该自动将日期行与价格同步吗?这并不是那么复杂。它实际上非常简单明了。@MasoodAnwar:您按
eventId
分组,并为每个
eventId
找到
MIN(eventDate)
,但为什么您认为
price
将来自同一行,而
eventDate
最小?如您所知,
price
可以来自不同的行。所以实际上你可以把它看作是一个完全随机选择的行。例如,MSSQL和Oracle中不允许使用更多此类按语法分组(当您可以在“选择而不聚合”中使用
price
字段时)。谢谢Valex!这帮了大忙。为了澄清问题,您希望获得每个
eventID
的最新
price
eventDate
,还是最旧的?
|                    EVENTDATE | EVENTID | PRICE |
|------------------------------|---------|-------|
| April, 15 2013 00:00:00+0000 |       1 |   100 |
| April, 18 2013 00:00:00+0000 |       2 |    80 |
| April, 22 2013 00:00:00+0000 |       3 |   140 |