【问题标题】:Getting results from database for this month, next month and last month从数据库中获取本月、下月和上月的结果
【发布时间】:2015-12-03 13:46:53
【问题描述】:

我需要检查当前月份、下个月和上个月的查询结果。当前月份的查询是:

SELECT 
    Types.Type,
    (SELECT  COUNT(*) FROM Pitch
         LEFT JOIN booking ON Pitch.Location_Id = booking.Location_Id
     WHERE 
         Pitch.Type_ID = Types.Type_ID
         AND (MONTH(Booking.EndDate) = month(GETDATE()) 
              OR MONTH(Booking.StartDate) = month(GETDATE()))
    ) AS total
FROM
    Types

我尝试了下个月的月份GETDATE()+1 和上个月的month(GETDATE()-1),这也有效,但前提是日期不进入明年(如果我在 2015 年 12 月运行查询,它不会找到2016 年 1 月的记录)。

【问题讨论】:

  • 请注意,MONTH(GETDATE()+1) 将返回明天的月份,而不是下个月。您正在寻找MONTH(GETDATE())+1。另外,您的查询不排除超过 1 个月的Bookings 吗?要解决这个问题,您可以简单地比较 MONTH(Booking.EndDate) >= month(GETDATE()) AND MONTH(Booking.StartDate) <= month(GETDATE())... 我认为。
  • 您使用的是哪个 dbms?太多的 dbms 产品在日期/时间方面远不符合 ANSI SQL...)

标签: sql date


【解决方案1】:

设法解决了问题

SELECT 
    Types.Type,
    (SELECT 
         COUNT(*) 
     FROM 
         Pitch LEFT JOIN booking ON Pitch.Location_Id = booking.Location_Id
     WHERE 
         Pitch.Type_ID = Types.Type_ID AND 
         (MONTH(Booking.EndDate) = month(DATEADD(MM,1,getdate())) 
          OR MONTH(Booking.StartDate) = month(DATEADD(MM,1,getdate())))
    ) AS total
FROM
    Types

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多