Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 最近旅行的乘客_Sql_Amazon Redshift - Fatal编程技术网

Sql 最近旅行的乘客

Sql 最近旅行的乘客,sql,amazon-redshift,Sql,Amazon Redshift,选择不同的乘客 从桌子上 旅行日期在最近两个月内 按乘客分组 当查询在10月-9月和8月运行时,应提取数据。 在11月-9月和10月运行时,应提取数据 在上述示例中,乘客1应被牵引,因为他在8月和9月都旅行过。乘客2号和3号不应被牵引。使用下面的查询 Select passenger FROM travel WHERE DATEDIFF(month, travel_date, CURRENT_TIMESTAMP)<=2 group BY passenger 对于获取当前日期,可以使用g

选择不同的乘客 从桌子上 旅行日期在最近两个月内 按乘客分组

当查询在10月-9月和8月运行时,应提取数据。 在11月-9月和10月运行时,应提取数据

在上述示例中,乘客1应被牵引,因为他在8月和9月都旅行过。乘客2号和3号不应被牵引。

使用下面的查询

Select passenger FROM travel
WHERE  DATEDIFF(month, travel_date, CURRENT_TIMESTAMP)<=2
group BY passenger
对于获取当前日期,可以使用getdate或current_时间戳。 如果你想要全部的细节,你不需要分组

我将使用date_trunc进行日期筛选。然后:

select t.passenger
from t
where travel_date >= date_trunc('month', current_date) - interval '2 month' and
      travel_date < date_trunc('month', current_date)
group by t.passenger
having count(distinct date_trunc('month', travel_date)) = 2;

这使用countdistinct,因为它是可归纳的。例如,对于过去6个月内有4次旅行的乘客,可以很容易地调整此查询。

我理解您的要求,从今天起,选择过去两个月内每月至少旅行一次的乘客,不包括当月的旅行

所需的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())
如果要验证代码,只需运行以下脚本:


你试过什么?你被卡在哪里了?堆栈溢出不会为您编写整个解决方案。请参见:切切实实地说,因为这出现在它的表面上是一个家庭作业/课程作业的问题,请考虑发布你的作业的学术完整性的含义,而不显示在解决问题之前的善意的努力。@下面是我所尝试的,选择不同的乘客,表中的旅行日期,其中旅行日期>=dateadd'month',-2,date_trunc'month',sysdate和旅行日期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]