我想为所有门票选择最早的活动日期。我在mysql中创建了这个查询“tixdate”视图(我用于其他目的),它按票号排序记录,然后按eventdate排序。这个观点看起来像这样:
EventDate | Ticket
2018-02-25 | 998<br>
2018-02-25 | 998<br>
2018-02-25 | 998<br>
2018-02-11 | 998<br>
2018-02-11 | 998<br>
2018-02-04 | 998<br>
2018-02-04 | 998<br>
2018-02-03 | 998<br>
2018-02-03 | 998<br>
2018-01-27 | 998<br>
2018-01-27 | 998<br>
2018-01-21 | 998<br>
2018-01-21 | 998<br>
2018-01-14 | 998<br>
2018-01-14 | 998<br>
2018-01-13 | 998<br>
2018-01-13 | 998<br>
2018-01-07 | 998<br>
-----------------------------------
我创建了一个新的mysql视图,仅列出最早的事件日期:
SELECT
'audTix` AS `audTix`,
`audDt` AS `audDt`
FROM
`tixdate`
GROUP BY
`audTix`
ORDER BY
`audDt` DESC
产生了一条记录:
2018-01-13 | 998
但它应该选择2018-02-25日期。我做错了什么?
答案 0 :(得分:1)
无论您是从表格还是视图中进行选择,数据都会被视为无序数据。因此,即使您的视图tixdate
包含ORDER BY
子句,一旦您从中选择它,它就会被忽略。 (更确切地说:DBMS可以自由地忽略它;它应该这样做以便更快地选择数据。)
任何方式,即使不是这种情况,那么您的查询仍然无法正常工作。您按audTix
进行分组,因此每个audTix
获得一个结果行。但是,您选择属于audDt
的{{1}} audDt
。您不会说出哪个(例如最小值,最大值或平均值),因此MySQL会将其转换为audTix
。然后,您按ANY_VALUE(audDt)
对结果进行排序,但由于这些是任意选择的,因此没有任何意义。 (如果你的表只包含一个audDt
,你只得到一个结果行,所以没有什么可以明显排序。)
您想要的是最长日期,因此请选择它:
audTix
如果您想按日期订购,请改为SELECT audTix, MAX(audDt)
FROM tixdate
GROUP BY audTix
ORDER BY audTix;
。如果您只希望ORDER BY MAX(audDt)
具有最新日期,那么您audTix
。
如果您只想要所有记录中最早的事件日期(不选择关联的ORDER BY MAX(audDt) DESC LIMIT 1
),那就是
audTix
当然。
(并且您可以从视图SELECT MAX(audDt) FROM tixdate;
中删除ORDER BY
子句。如上所述,视图中的tixdate
子句毫无意义。)