【问题标题】:How can I get the most recent date in SQL?如何获取 SQL 中的最新日期?
【发布时间】:2012-03-09 05:35:14
【问题描述】:

我想做一个 SQL 查询,从日期列中获取今天的日期和最近的日期。因此,如果我的数据库中有三个具有以下日期的记录:

  • 2012 年 3 月 8 日
  • 2012 年 3 月 2 日
  • 2011 年 12 月 8 日

我希望 SQL 查询返回 2012 年 3 月 8 日和 2012 年 3 月 2 日(最近日期)的所有记录。我该怎么做?

我可以使用以下方式确定今天的日期:

CONVERT( varchar(100), DATEADD( DAY, 0, getdate() ), 111)

谢谢

编辑: 感谢大家。我还有一个问题。我创建了两个视图:

create view with top dates
CREATE VIEW topDates AS
select DISTINCT TOP 3 replace(CONVERT(VARCHAR(20),date,111),'-','/') AS dates from     CSAResults.dbo.Details

create view dateTwo
select *
from (select ROW_NUMBER() over (order by dates desc) as srNo, dates
    from topDates)
    AS employee
    WHERE srNo=2

现在我想从我的数据库中选择 *,其中一列等于视图“dateTwo”中的“日期”列

select buildNumber
from CSAResults.dbo.Details
where buildNumber LIKE '%Main '+ (SELECT dates FROM dateTwo) + '%'

但这不会返回任何内容。

谢谢

【问题讨论】:

  • 如果表格中没有今天的日期怎么办?然后只返回 1 行?
  • 谢谢大家。我有它来选择日期。如果有人可以帮助我解决我的下一个问题,我对我的帖子进行了编辑:)
  • 下次最好发布一个单独的问题,但我已经发布了另一个答案
  • @user974873 您应该将您的编辑作为另一个问题发布。

标签: sql date


【解决方案1】:

您可以执行以下操作:

select date
from yourtable
where 
(
    date = Convert(varchar(10), getdate(), 101)
    OR
    date IN (SELECT Max(date) 
                FROM yourtable
                WHERE date!= Convert(varchar(10), getdate(), 101))
)

【讨论】:

    【解决方案2】:

    这是一个执行您所要求的示例脚本。它使用子查询来选择日期为 MAX 的所有记录。您只需添加一个 OR 来选择当前日期的项目。

        DECLARE @A TABLE
    (
    part_no VARCHAR(5),
    rev CHAR,
    on_hand TINYINT,
    safety_stock TINYINT,
    so_no VARCHAR(5),
    so_date DATETIME
    )
    
    
    INSERT @A
    SELECT '12345', 'A', 10, 15, 'S1234', '12/14/2009' UNION ALL
    SELECT '12345', 'A', 10, 15, 'S1233', '10/01/2009' UNION ALL
    SELECT '12345', 'A', 10, 15, 'S1232', '08/02/2009' UNION ALL
    SELECT '12346', '',  5, 0, 'S1231', '08/01/2009' UNION ALL
    SELECT '12347', '-', 0, 0, 'S1230', '10/20/2009' UNION ALL
    SELECT '12347', '-', 0, 0, 'S1229', '07/15/2009'
    
    SELECT * FROM @A AS A
    WHERE so_date =
    (
        SELECT MAX(so_date)
        FROM @A AS B
        WHERE B.part_no = A.part_no AND B.Rev = A.Rev 
    )
    

    【讨论】:

      【解决方案3】:
      SELECT *
      INTO #TEMP
      FROM
      (
      SELECT GETDATE() DATE_FIELD, 'Blah1...' OTHER_FIELDS
      UNION SELECT GETDATE() DATE_FIELD, 'Blah2...' OTHER_FIELDS
      UNION SELECT DATEADD(d,-1,GETDATE()) DATE_FIELD, 'Blah3...' OTHER_FIELDS
      UNION SELECT DATEADD(d,-1,GETDATE()) DATE_FIELD, 'Blah4...' OTHER_FIELDS
      UNION SELECT DATEADD(d,-3,GETDATE()) DATE_FIELD, 'Blah5...' OTHER_FIELDS
      ) A
      
      SELECT * FROM #TEMP
      
      SELECT * FROM
      (
       SELECT DATE_FIELD, OTHER_FIELDS,
       DENSE_RANK() OVER (ORDER BY DATE_FIELD DESC) _RANK
       FROM #TEMP
      ) A
      WHERE A._RANK < 3
      

      【讨论】:

        【解决方案4】:

        第二个问题:

        select buildNumber
        from CSAResults.dbo.Details
        inner join dateTwo
        on buildNumber LIKE '%Main '+ dateTwo.dates + '%'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-05
          • 1970-01-01
          • 2014-10-27
          • 1970-01-01
          相关资源
          最近更新 更多