2012-03-01 163 views
30

全部 我想顯示特定ID的最後5個輸入數據。 我的SQL查詢,按日期和時間降序排序?

SELECT id, name, form_id, DATE(updated_at) as date 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY updated_at DESC 

updated_at是DATETIME

它顯示最後5項按日期排序,而不是時間。在同一日期,它按字母順序排序。

假設我有相同的日期3項與差異時間

假設

Ajay 1/3/2012 1:15 
John 1/3/2012 1:00 
Bony 1/3/2012 1:10 

查詢上述查詢

什麼我得到後

Ajay 1/3/2012 1:15 
Bony 1/3/2012 1:10 
John 1/3/2012 1:00 

排序日期然後按字母順序排列

我想這是什麼..

John 1/3/2012 1:00 
Bony 1/3/2012 1:10 
Ajay 1/3/2012 1:15 

按日期和時間也會分類...

+2

你想要什麼,你說是不是按降序排列... – 2012-03-01 06:56:42

+0

什麼是列的定義'updated_at'? – 2012-03-01 06:57:39

+0

我想按日期和時間將它縮短... – 2012-03-01 06:57:44

回答

57

如果你想在最後5行,按升序排序,你需要一個子查詢:

SELECT * 
FROM 
    (SELECT id, name, form_id, DATE(updated_at) AS updated_date, updated_at 
     FROM wp_frm_items 
     WHERE user_id = 11 
     AND form_id=9 
     ORDER BY updated_at DESC 
     LIMIT 5 
    ) AS tmp 
ORDER BY updated_at 

閱讀10次的問題後,這可能(僅僅是可能),你想要什麼。按日期倒序排列,然後順序按時間(在同一天)順序遞增:

SELECT id, name, form_id, DATE(updated_at) AS updated_date 
FROM wp_frm_items 
WHERE user_id = 11 
    AND form_id=9 
ORDER BY DATE(updated_at) DESC 
     , updated_at ASC 
+1

如果這是他想要的,更好地在應用程序中反轉結果,而不是執行該查詢的權利? – 2012-03-01 07:04:54

+0

@MatthewScragg:只有5行返回,我認爲不重要,兩者都可以。 – 2012-03-01 07:07:45

+0

請參閱最後5或10在這裏不是問題問題太短 – 2012-03-01 07:09:59

2
SELECT id, name, form_id, DATE(updated_at) as date 
FROM wp_frm_items 
WHERE user_id = 11 && form_id=9 
ORDER BY date ASC 

「DESC」 表示遞減,但你需要升序( 「ASC」)。

2
SELECT * FROM (
       SELECT id, name, form_id, DATE(updated_at) as date 
       FROM wp_frm_items 
       WHERE user_id = 11 && form_id=9 
       ORDER BY updated_at DESC 
      ) AS TEMP 
    ORDER BY DATE(updated_at) DESC, name DESC 

試試看。

+1

@NoobASThreeDeveloper:不,這不是沒有必要的。它不僅是列中的日期,還有時間,並且在大多數情況下,記錄不能具有相同的日期和時間。因此需要步驟 – 2012-03-01 07:27:17

+0

@Click:這一步確實是不必要的。您不需要將其包裝在子查詢中。一個簡單的'ORDER BY DATE(updated_at)DESC,名字DESC'會有相同的結果。更不用說,你擁有的語法不是有效的SQL(儘管MySQL可能允許它)。在外部查詢中,沒有'updated_at'和'ORDER BY DATE(updated_at)'應該導致錯誤。 – 2012-03-01 08:09:55

+0

@ypercube:如果你這樣做,記錄也不會按'TIME'排序。 OP希望記錄按日期和時間排序,不僅僅是日期和時間 – 2012-03-01 08:17:57

1

如果你的意思是你想按日期排序第一,然後通過名稱

SELECT id, name, form_id, DATE(updated_at) as date 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY updated_at DESC,name ASC 

這將日期排序記錄首先,然後按名稱

16

把UNIX_TIMESTAMP將做的伎倆。

SELECT id, NAME, form_id, UNIX_TIMESTAMP(updated_at) AS DATE 
    FROM wp_frm_items 
    WHERE user_id = 11 && form_id=9 
    ORDER BY DATE DESC 
1

這是按日期排序記錄最簡單的方法之一:

SELECT `Article_Id` , `Title` , `Source_Link` , `Content` , `Source` , `Reg_Date`, UNIX_TIMESTAMP( `Reg_Date`) AS DATE 
FROM article 
ORDER BY DATE DESC