SQL选择具有限制的排序组

时间:2019-06-05 17:41:12

标签: sql database mariadb sql-order-by

我有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!),然后循环所有记录并进行分组,然后对记录进行排序,这非常非常慢。

我该如何解决?谢谢!

1 个答案:

答案 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;