SQL 如何选择最近的日期项

Posted

技术标签:

【中文标题】SQL 如何选择最近的日期项【英文标题】:SQL How to Select the most recent date item 【发布时间】: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,我编辑了我的帖子 【参考方案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) 以很好地格式化和语法高亮! 哎呀..我一定错过了格式,我没有注意到。还是谢谢。

以上是关于SQL 如何选择最近的日期项的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 中包含多个列的报表中的列中选择最近的项目?

SQL在特定日期选择重复项

如何在 Oracle SQL 中仅选择最近 30 天内第一次在表中显示的这些 ID?

SQL 选择除最近日期之外的所有内容

按最近日期订购日期-SQL 选择单个 ID

sql 语句如何插入全年日期?