mysql group by,两个条件,限制1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql group by,两个条件,限制1相关的知识,希望对你有一定的参考价值。
我想为所有门票选择最早的活动日期。我在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日期。我究竟做错了什么?
无论您是从表格还是视图中进行选择,数据都被视为无序数据。因此,即使您的视图tixdate
包含ORDER BY
子句,一旦您从中选择它,它将被忽略。 (更确切地说:DBMS可以自由地忽略它;它应该这样做以便更快地选择数据。)
无论如何,即使不是这种情况,那么您的查询仍然无效。你按audTix
分组,所以每个audTix
得到一个结果行。但你选择audDt
这是一个属于audDt
的audTix
。您没有说出哪个(例如最小值,最大值或平均值),因此MySQL会将其转换为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
子句。如上所述,视图中的ORDER BY
子句毫无意义。)
以上是关于mysql group by,两个条件,限制1的主要内容,如果未能解决你的问题,请参考以下文章
MySql学习 —— where / having / group by / order by / limit 简单查询