mysql按时间排序不正确_mysql-按日期时间排序,但彼此之间保留相同标题的记录

我有像桌子

test

+---------------------+-------+

| date_in | title |

+---------------------+-------+

| 2018-01-01 00:00:00 | foo |

| 2018-01-02 00:00:00 | bar |

| 2018-01-03 00:00:00 | man |

| 2018-01-04 00:00:00 | foo |

| 2018-01-05 00:00:00 | test |

+---------------------+-------+

我想要的结果是

+---------------------+-------+

| date_in | title |

+---------------------+-------+

| 2018-01-05 00:00:00 | test |

| 2018-01-04 00:00:00 | foo | -- see this

| 2018-01-01 00:00:00 | foo | -- see this

| 2018-01-03 00:00:00 | man |

| 2018-01-02 00:00:00 | bar |

+---------------------+-------+

我已经在下面的查询和其他几个查询中尝试过,但是它不起作用

select * from test order by title, date_in desc

解决方法:

您尝试按三列订购.

>每个标题首次出现的date_in.

>标题本身

>每行的date_in

您需要在查询中生成这三个中的第一个.为此,您编写一个子查询并将其(好像它是一个虚拟表)连接到表中.

select min(date_in) firstdate,

title

from test

group by title

select detail.*

from test detail

join (select min(date_in) firstdate,

title

from test

group by title

) firstdate on detail.title = firstdate.title

order by firstdate.firstdate, detail.title, detail.date_in

如果子查询很慢,请尝试在(title,date_in)上创建索引.这种查询使用的是所谓的loose index scan,并且应该相当快.

ALTER TABLE test ADD INDEX test_title_date (title,date_in);

标签:mysql

来源: https://codeday.me/bug/20191108/2009075.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值