Mysql 如何按时间戳对结果排序,除了其中一个之外?
我有一张这样的桌子:Mysql 如何按时间戳对结果排序,除了其中一个之外?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有一张这样的桌子: // Mytable +----+--------------------+------+------------------+-----------+ | Id | QuestionOrAnswer | Type | AcceptedAnswerId | timestamp | +----+--------------------+------+------------------+-----------+ | 1 | question1 | 0
// Mytable
+----+--------------------+------+------------------+-----------+
| Id | QuestionOrAnswer | Type | AcceptedAnswerId | timestamp |
+----+--------------------+------+------------------+-----------+
| 1 | question1 | 0 | 3 | 1 |
| 2 | answer1 | 1 | NULL | 2 |
| 3 | answer2 | 1 | NULL | 3 | -- accepted answer
| 4 | answer3 | 1 | NULL | 4 |
+----+--------------------+------+------------------+-----------+
现在我想要这个结果:(请关注订单)
那我怎么做呢?(我想要完全像这样的东西)
以下是我的尝试:
SELECT * FROM Mytable WHERE 1 ORDER BY Type, {I need to add something here}, timestamp
您需要将表连接到表本身,以确定哪一行是可接受的答案。然后,该信息可以按的顺序使用:
SELECT t.*
FROM Mytable t LEFT JOIN
Mytable tans
ON t.id = tans.AcceptedAnswerId
ORDER BY t.Type,
(tans.id IS NOT NULL) DESC,
t.timestamp
你有什么标准知道id 2应该是第一个??在你的问题中,那部分我不清楚。@Clayton。因为这是公认的答案。@Clayton Gordon Linoff对了,顺便说一句,id 2不应该是第一个,id 3应该是第一个。谢谢,+1。但是似乎很昂贵,我想如果我在接受答案的
AcceptedAnswerId
列中设置1
,我就可以这样做:按类型排序,接受answerid,时间戳
。你怎么想?@stack。你应该问另一个问题,更详细地说明你的实际表格和期望的结果。现在改变你的问题是不礼貌的,因为它会使得票率下降的答案无效。我接受你的答案作为我的答案。据我所知,你是一个非常专业的数据库程序员(我总是喜欢你的解决方案),但在这种情况下,我认为解决方案比你的要好得多,我把小提琴和你联系起来,只是因为我知道你对学习新事物很感兴趣,所以没有冒犯的意思。顺便说一句,你的解决方案不起作用。。。(不过人们可以了解你答案的大意)@stack。您的答案是使用顺序中的变量。据我所知,对于变量的赋值顺序没有任何保证。仅仅因为这在一种情况下可能有效,并不意味着这是一个普遍的解决方案。(如果您有文档表明在顺序中使用变量是安全和确定的,请分享这些信息)。
SELECT t.*
FROM Mytable t LEFT JOIN
Mytable tans
ON t.id = tans.AcceptedAnswerId
ORDER BY t.Type,
(tans.id IS NOT NULL) DESC,
t.timestamp