【问题标题】:SQL How to Select the most recent date itemSQL 如何选择最近的日期项
【发布时间】:2011-05-04 16:43:52
【问题描述】:

您好,我有一个带有列的表格:

*使用预言机

ID                  NUMBER
USER_ID            NUMBER
DATE_ADDED          DATE
DATE_VIEWED        DATE
DOCUMENT_ID        VARCHAR2
URL                VARCHAR2
DOCUMENT_TITLE      VARCHAR2
DOCUMENT_DATE        DATE

我想知道如何获取给定用户最近添加的文档。

Select * FROM test_table WHERE user_id = value AND (do something with date_added column)

谢谢

【问题讨论】:

  • 对不起,我正在使用 oracle,我编辑了我的帖子

标签: sql oracle select date


【解决方案1】:
Select * 
FROM test_table 
WHERE user_id = value 
AND date_added = (select max(date_added) 
   from test_table 
   where user_id = value)

【讨论】:

    【解决方案2】:

    不确定确切的语法(您使用 varchar2 类型,这意味着不是 SQL Server,因此是 TOP),但您可以对 MySQL 使用 LIMIT 关键字:

    Select * FROM test_table WHERE user_id = value
         ORDER BY DATE_ADDED DESC LIMIT 1
    

    oracle中的rownum

     SELECT * FROM
         (Select rownum as rnum, * FROM test_table WHERE user_id = value ORDER BY DATE_ADDED DESC)
     WHERE rnum = 1
    

    如果是 DB2,我不确定是 TOP、LIMIT 还是 rownum...

    【讨论】:

      【解决方案3】:

      使用 SQL Server 尝试:

      SELECT TOP 1 *
      FROM dbo.youTable
      WHERE user_id = 'userid'
      ORDER BY date_added desc
      

      【讨论】:

        【解决方案4】:

        如果同时添加多个文档,您尚未指定查询应返回的内容,因此此查询假定您希望返回所有文档:

        SELECT t.ID,
               t.USER_ID,
               t.DATE_ADDED,
               t.DATE_VIEWED,
               t.DOCUMENT_ID,
               t.URL,
               t.DOCUMENT_TITLE,
               t.DOCUMENT_DATE
        FROM (
          SELECT test_table.*,
                 RANK()
                 OVER (ORDER BY DOCUMENT_DATE DESC) AS the_rank
          FROM   test_table
          WHERE  user_id = value
          )
        WHERE the_rank = 1;
        

        此查询只会对数据进行一次传递。

        【讨论】:

          【解决方案5】:

          假设您的 RDBMS 知道窗口函数并且 CTE 和 USER_ID 是患者的 id:

          WITH TT AS (
              SELECT *, ROW_NUMBER() OVER(PARTITION BY USER_ID ORDER BY DOCUMENT_DATE DESC) AS N
              FROM test_table
          )
          SELECT *
          FROM TT
          WHERE N = 1;
          

          我假设您想按 DOCUMENT_DATE 排序,如果需要,您可以轻松更改。如果您的 RDBMS 不知道窗口函数,则必须进行连接:

          SELECT *
          FROM test_table T1
          INNER JOIN (SELECT USER_ID, MAX(DOCUMENT_DATE) AS maxDate
                      FROM test_table
                      GROUP BY USER_ID) T2
              ON T1.USER_ID = T2.USER_ID
                  AND T1.DOCUMENT_DATE = T2.maxDate;
          

          最好告诉我们您的 RDBMS 是什么。此查询为每个患者选择最近的日期,您可以为给定患者添加条件。

          【讨论】:

            【解决方案6】:
            Select Top 1* FROM test_table WHERE user_id = value order by Date_Added Desc
            

            【讨论】:

            • 如果您发布代码或 XML,在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮 (101 010) 以很好地格式化和语法高亮!
            • 哎呀..我一定错过了格式,我没有注意到。还是谢谢。
            猜你喜欢
            • 2011-10-24
            • 2021-01-30
            • 1970-01-01
            • 1970-01-01
            • 2015-06-21
            • 1970-01-01
            • 2014-09-17
            • 1970-01-01
            • 2014-09-02
            相关资源
            最近更新 更多