想知道如何返回MySQL组中的第一行与最后一行。返回一系列日期,但需要显示第一个日期。
select * from calendar where approved = 'pending' group by eventid;
答案 0 :(得分:3)
听起来你想使用ORDER BY而不是GROUP BY:
select * from calendar where approved = 'pending' order by eventid asc limit 1;
答案 1 :(得分:2)
使用min
的{{1}}函数insead返回组中的第一行与最后一行。
max
如果您想要每个组的整行,请加入自己的表格,过滤每个组的最小日期:
select min(date) from calendar ...
答案 2 :(得分:2)
当您使用GROUP BY
时,MySQL不保证您获得的每个组中的哪一行。实际上,理论上它甚至可以从一行中选择一些列,而从另一行中选择一些列。 MySQL Reference Manual说:
“MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列。[...]您可以通过避免不必要的列排序和分组来使用此功能来获得更好的性能但是,这主要适用于每个未在GROUP BY中命名的非聚合列中的所有值对于每个组都相同的情况。服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定“。
你想做的事情是这样的:
SELECT
calendar.*
FROM
calendar
NATURAL JOIN (
SELECT
eventid, MIN(date) AS date
FROM
calendar
GROUP BY eventid
) AS foo
答案 3 :(得分:0)
如果你想显示group-by语句的第一个和最后一个元素,这对我很有用:
SELECT min(date) AS minn, max(date) AS maxx
FROM table_name
GROUP BY occasion
感谢您提出问题
答案 4 :(得分:0)
我有解决方案。要选择组中的最后一行,请使用此
select * from calendar
where approved = 'pending'
group by eventid
ORDER BY max(`date`) DESC;
或者这样从组中选择第一行......
select * from calendar
where approved = 'pending'
group by eventid
ORDER BY min(`date`) DESC;
DESC无关紧要,只有在选择了每个组的一行后,才按降序对整个过滤结果进行排序。