【问题标题】:SQL Last 6 Months过去 6 个月的 SQL
【发布时间】:2022-02-23 19:00:37
【问题描述】:

我有一个包含一个日期时间列的表格。我只需要返回最近 6 个月的行。这可以通过

where datetime_column > DATEADD(m, -6, current_timestamp)

但是,如果我想从该月的第一天开始返回最近一个月,如何扩展此选项?例如。我在月中运行此条件(14/6/2000),最新行设置为14/1/2000,但我想将其返回为1/1/2000。有什么建议吗?

我尝试了一些子查询(日期时间的最大函数,包括月份函数),但没有成功。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    对于 MS SQL Server,您可以使用:

    where datetime_column >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6,
    current_timestamp)), 0)
    

    【讨论】:

      【解决方案2】:

      在 SQL Server 中

      where datetime_column > dateadd(m, -6, getdate() - datepart(d, getdate()) + 1)
      

      SQLFiddle demo

      在 MySQL 中

      where datetime_column > curdate() - interval (dayofmonth(curdate()) - 1) day - interval 6 month
      

      SQLFiddle demo

      【讨论】:

      • 你有 SQL-Server 版本吗?有人出于某种我不知道的原因将我的问题从 SQL-Server 编辑到 MySQL。谢谢。
      【解决方案3】:

      试试这个

      where datediff(month, datetime_column, getdate()) <= 6

      排除或过滤未来的日期

      where datediff(month, datetime_column, getdate()) between 0 and 6


      这部分datediff(month, datetime_column, getdate()) 将获取当前日期和 Datetime_Column 数量的月差,并将返回 Rows 如下:

      结果
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

      这是我们获得最近 6 个月数据的最后条件

      结果

      【讨论】:

      • 你应该告诉人们为什么这个查询回答了这个问题,例如解释它是如何工作的
      • 这其实是一个很好的答案。太糟糕了,它对细节很轻。它将在当年获得行。而如果您使用其他一些答案,您也会得到前几年的答案。
      • 我试过了,但它不会得到最近 6 个月的数据。当您的表格确实存储未来日期时,它也会返回未来 6 个月的范围。
      • 排除未来的日期,你可以做类似 where datediff(month, datetime_column, getdate()) 在 0 到 6 之间的事情。期货日期结果是负数
      【解决方案4】:

      .... where yourdate_column > DATE_SUB(now(), INTERVAL 6 MONTH)

      【讨论】:

        【解决方案5】:
        select *
        from tbl1
        where
        datetime_column >= 
        DATEADD(m, -6, convert(date, convert(varchar(6), getdate(),112) + '01'))
        

        【讨论】:

          猜你喜欢
          • 2019-04-09
          • 1970-01-01
          • 2020-05-20
          • 2011-04-25
          • 1970-01-01
          • 1970-01-01
          • 2020-08-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多