Mysql 按日期时间排序,但将标题相同的记录放在彼此的顶部
我有一张桌子Mysql 按日期时间排序,但将标题相同的记录放在彼此的顶部,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 0
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
这里是SQLFIDLE模式。您试图按三列排序
(title,date\u in)
上创建索引。这种类型的查询使用所谓的
ALTER TABLE test ADD INDEX test_title_date (title,date_in);
试试这个查询,这是使用子查询,如果这不是问题,你可以试试这个
SELECT test.* FROM (select MAX(date_in) as temp_date_in,title from
test GROUP BY title order by date_in desc) as temp JOIN test ON
temp.title = test.title ORDER BY temp.temp_date_in DESC,test.date_in DESC
此子查询需要花费超过100k条记录的时间。我想知道是否有更好的解决方案,我想我还是用我以前的解决方案吧,那就是
在DESC
中按标题顺序按日期从表GROUP中选择GROUP\u CONCAT(title),然后分解分组结果,但如果有MySQL解决方案,我还是很想听到。请参阅我的编辑。而且,如果您仍然存在性能问题,那么可以查看EXPLAIN
输出,甚至提出另一个问题。此子查询需要花费超过100k条记录的时间。我想知道是否有更好的解决方案存储过程有什么用吗?
ALTER TABLE test ADD INDEX test_title_date (title,date_in);
SELECT test.* FROM (select MAX(date_in) as temp_date_in,title from
test GROUP BY title order by date_in desc) as temp JOIN test ON
temp.title = test.title ORDER BY temp.temp_date_in DESC,test.date_in DESC