我有sql问题。 例如,我的表导联具有列ID,名称,datum_event。
在我的表中有2000条记录。
我需要这样做:按datum_event(具有日期格式)对所有记录进行排序,按名称对所有记录进行分组,然后按datum_event对组进行排序。
例如,我有潜在客户:
1 Name1 2019-05-06
2 Name1 2019-10-04
3 Name1 2019-08-06
4 Name2 2019-04-06
5 Name2 2019-20-04
6 Name3 2019-01-06
我只需要在页面上显示2条线索。 因此对于一页结果是:
5 Name2 2019-20-04
4 Name2 2019-04-06
第二页是:
2 Name1 2019-10-04
1 Name1 2019-05-06
第三页是:
3 Name1 2019-08-06
6 Name3 2019-01-06
是否可以使用mysql?因为现在我用php进行此操作,所以我需要从表中获取所有记录(2000!),然后循环所有记录并进行分组,然后对记录进行排序,这非常非常慢。
我该如何解决?谢谢!
答案 0 :(得分:0)
我不确定100%,但是我认为您正在寻找:
select t.*
from t
order by min(datum_event) over (partition by name),
name,
datum_event desc;
这将按最早事件的顺序返回名称。然后,在名称中按相反的日期顺序对事件进行排序。
编辑:
在旧版本的MariaDB中,您可以将其表示为:
select t.*
from t cross join
(select name, min(datum_event) as min_datum_event
from t
group by name
) n
on t.name = n.name
order by n.min_datum_event,
name,
datum_event desc;