2012-03-01 161 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