我已将您的要求理解为选择过去两个月(从今天起)每月至少旅行一次的乘客,不包括当月的旅行。
所需的SQL代码:
WITH cte
AS (
SELECT passenger AS passenger
,MONTH(travel_date) AS travel_month
,COUNT(*) AS number_of_travels
FROM [dbo].[tblTravels]
WHERE DATEDIFF(month, travel_date, GETDATE()) <= 2
AND MONTH(travel_date) != MONTH(GETDATE())
GROUP BY passenger
,MONTH(travel_date)
)
SELECT passenger
FROM cte
GROUP BY passenger
HAVING COUNT(*) > 1
关于答案的更多解释:
获取从今天开始的最后两个月,不包括当前月份
DATEDIFF(month, travel_date, GETDATE()) <= 2
AND MONTH(travel_date) != MONTH(GETDATE())
如果您想验证代码,只需运行以下脚本:
CREATE TABLE [dbo].[tblTravels] (
[passenger] [int] NULL
,[travel_date] [datetime] NULL
,[travel_id] [nchar](10) NULL
) ON [PRIMARY]
DELETE FROM [dbo].[tblTravels]
INSERT INTO [dbo].[tblTravels] VALUES (1, '2020-08-01', 'a')
INSERT INTO [dbo].[tblTravels] VALUES (1, '2020-09-01', 'a')
INSERT INTO [dbo].[tblTravels] VALUES (2, '2020-08-01', 'a')
INSERT INTO [dbo].[tblTravels] VALUES (3, '2020-09-01', 'a')
GO
SELECT *
FROM [dbo].[tblTravels]
GO
WITH cte
AS (
SELECT passenger AS passenger
,MONTH(travel_date) AS travel_month
,COUNT(*) AS number_of_travels
FROM [dbo].[tblTravels]
WHERE DATEDIFF(month, travel_date, GETDATE()) <= 2
AND MONTH(travel_date) != MONTH(GETDATE())
GROUP BY passenger
,MONTH(travel_date)
)
SELECT passenger
FROM cte
GROUP BY passenger
HAVING COUNT(*) > 1
DROP TABLE [dbo].[tblTravels]