【问题标题】:Sorting by date & time in descending order?按日期和时间降序排序?
【发布时间】:2020-05-19 15:37:39
【问题描述】:

全部 我想显示特定 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 是日期时间

它显示按日期而不是按时间排序的最后 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

还按日期和时间排序...

【问题讨论】:

  • 你说你想要的不是降序的……
  • updated_at的定义是什么?
  • 我也想按日期和时间缩短它...
  • update_at 什么数据类型?
  • 可以添加表格的定义吗? (所以我们看到了数据类型)

标签: mysql sql


【解决方案1】:

如果你想要最后 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

【讨论】:

  • 如果这是他想要的,最好在应用程序中反转结果而不是执行那个查询对吗?
  • @MatthewScragg:只返回 5 行,我认为这并不重要,两者都可以。
  • 查看最后 5 或 10 不是问题,这里的问题也很短
  • 我不明白为什么我们需要将 DATE(datefield) 添加到 DateTime 字段中......但它有效!
【解决方案2】:

输入 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

【讨论】:

    【解决方案3】:
    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”)。

    【讨论】:

      【解决方案4】:
      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
      

      试一试。

      【讨论】:

      • @NoobASThreeDeveloper:不,没有必要。它不仅是列中的日期,还有时间,并且在大多数情况下,记录不能具有相同的日期和时间。因此需要这一步
      • @Click:这一步确实是不必要的。您不需要将其包装在子查询中。一个简单的ORDER BY DATE(updated_at) DESC, name DESC 会产生相同的结果。更不用说您拥有的语法不是有效的 SQL(尽管 MySQL 可能允许它)。在外部查询中,没有updated_atORDER BY DATE(updated_at) 应该会导致错误。
      • @ypercube:如果这样做,记录也不会按TIME 排序。 OP 希望记录按日期和时间排序,而不仅仅是日期
      【解决方案5】:

      如果您的意思是先按日期排序,然后按名称排序

      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
      

      这将首先按日期排序记录,然后按名称排序

      【讨论】:

        【解决方案6】:

        这是按日期对记录进行排序的最简单方法之一:

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

        【讨论】:

          【解决方案7】:

          以下查询对我有用。 数据库表 t_sonde_results 具有域 d_date(数据类型 DATE)和 d_time(数据类型 TIME) 目的是查询 t_sonde_results 中按日期和时间排序的最后一个条目

          选择 * 来自 (选择 * 从 (SELECT * FROM t_sonde_results WHERE d_user_name = 'kenis' and d_smartbox_id = 6 order by d_time asc) AS tmp 按 d_date 和 d_time 限制 1) 作为 tmp1 排序

          【讨论】:

          • 以下查询对我有用。数据库表 t_sonde_results 具有域 d_date(数据类型 DATE)和 d_time(数据类型 TIME) 目的是查询 t_sonde_results 中按日期和时间排序的最后一个条目 SELECT * FROM t_sonde_results WHERE d_user_name = 'kenis' and d_smartbox_id = 6 order by d_date desc, d_time desc 限制 1
          【解决方案8】:

          我使用了部分在这里找到的更简单的解决方案:
          How to sort details with Date and time in sql server ?
          我用这个查询来得到我的结果:

          SELECT TOP (5) * FROM My_Table_Name WHERE id=WhateverValueINeed ORDER BY DateTimeColumnName DESC

          这更直接,对我有用。

          注意:Date的列有“datetime”类型

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-11
            • 1970-01-01
            • 2010-09-19
            • 2018-06-07
            • 1970-01-01
            相关资源
            最近更新 更多