[英]mysql distinct records from table with proper order
我是MySQL的新手,正在使用下表。
表名是“ rd”
log_time id value1 value2 descrip
2015-09-22 12:11:02 45 0 0 short
2015-09-16 08:02:02 15 1 3 nac
2015-09-15 10:01:02 21 1 4 open
2015-09-15 10:01:02 12 0 2 broke
2015-09-15 10:01:02 21 1 4 open
2015-09-15 10:01:02 12 0 2 broke
2015-09-12 11:11:02 45 0 0 short
2015-09-15 12:01:02 85 2 4 under
我想按log_time安排上表,以及我要選擇不同的記錄,如下所示
log_time id value1 value2 descrip
2015-09-12 11:11:02 45 0 0 short
2015-09-15 10:01:02 21 1 4 open
2015-09-15 10:01:02 12 0 2 broke
2015-09-15 12:01:02 85 2 4 under
2015-09-16 08:02:02 15 1 3 nac
2015-09-22 12:11:02 45 0 0 short
我嘗試了以下查詢,
SELECT distinct log_time,id,value1,value2,descrip FROM rd ORDER BY log_time
但我沒有得到預期的結果
log_time id value1 value2 descrip
2015-09-12 11:11:02 45 0 0 short
2015-09-15 10:01:02 12 0 2 broke
2015-09-15 10:01:02 21 1 4 open
2015-09-15 12:01:02 85 2 4 under
2015-09-16 08:02:02 15 1 3 nac
2015-09-22 12:11:02 45 0 0 short
請指導我獲得預期的結果。
在我看來,您按log_time
排序是正確的,但按id
排序卻不正確。 因此,使用ORDER BY log_time, id DESC
,您將得到想要的東西。
當您在ORDER BY
子句中指定多個列時,SQL從左到右確定順序。 在這種情況下,當兩行具有相同的log_time
值時,它將(然后只有)考慮id
的值,以確定哪一個先出現。
您的查詢是正確的,但是您需要給出二階條件,以便如果您使用相同的log_time獲得多個記錄,則可以基於該條件獲得下一個順序,否則mysql將自行選擇。
因此,您的查詢應如下所示-
SELECT DISTINCT col1,col2....
from table_name
order by first_field asc/desc, 2nd_field asc/desc;
因此,根據您的查詢-
SELECT distinct log_time,id,value1,value2,descrip
FROM rd
ORDER BY log_time ASC, id DESC;
注意:ASC是默認順序,因此您可以跳過ASC關鍵字,但是如果需要保持反向順序,則必須指定DESC關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.