我有类似的桌子
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
在这里http://sqlfiddle.com/#!9/1dd33f/4 SQLFiddle与模式。
答案 0 :(得分:2)
您尝试按三列进行订购。
您需要在查询中生成这三个中的第一个。为此,您编写一个子查询并将其(就像它是虚拟表一样)连接到表中。
此子查询可以解决问题。每个标题一行,显示标题出现的第一个日期。 (http://sqlfiddle.com/#!9/1dd33f/23/0)
select min(date_in) firstdate,
title
from test
group by title
将其加入到主表中。这是整个查询。 (http://sqlfiddle.com/#!9/1dd33f/22/0)
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);
答案 1 :(得分:1)
尝试此查询,这是使用子查询,如果那不是问题,则可以尝试
var user = UserInput.Text;
// user is just a string
await _connection.InsertAsync(user);