Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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_Postgresql - Fatal编程技术网

在最小日期范围和其他列中的日期之间计数的SQL查询

在最小日期范围和其他列中的日期之间计数的SQL查询,sql,postgresql,Sql,Postgresql,“临时”表显示收到活动请求的用户。一个用户可以发出多个请求。因此,received列有多个日期,显示收到请求的时间。“更改”表显示状态更改的时间。因此,“已更改”的每个用户只有1个值。需要查找MINreceived日期和状态更改日期之间每个用户的请求数 预期结果应如下所示:-不应选择id-33的第三行,因为接收日期在更改日期之后 temp |id|received |changed | |33|2019-02-18|2019-11-18| |33|2019-08-02|201

“临时”表显示收到活动请求的用户。一个用户可以发出多个请求。因此,received列有多个日期,显示收到请求的时间。“更改”表显示状态更改的时间。因此,“已更改”的每个用户只有1个值。需要查找MINreceived日期和状态更改日期之间每个用户的请求数

预期结果应如下所示:-不应选择id-33的第三行,因为接收日期在更改日期之后

       temp
|id|received  |changed   |
|33|2019-02-18|2019-11-18|
|33|2019-08-02|2019-11-18|
|33|2019-12-27|2019-11-18|
|18|2019-07-14|2019-10-18|
|50|2019-03-20|2019-05-26|
|50|2019-01-19|2019-05-26|
我已尝试添加一个附加列,其中包含每个用户的MINreceived date。无法计算如何获取范围部分

|id|total_requests_sent|
|33|2                  |
|18|1                  |
|50|2                  |



这将对您有用:

选择id,countdays作为发送的请求总数 从…起 选择id,已更改-按天接收 从temp1到foo 其中天>0 按id分组; 这里的逻辑是减去两天,然后计算值为正的天数,即接收>更改

输出:

已发送的id请求总数 50 2 18 1 33 2 编辑

我现在只检查了你问题的另一部分!如果还希望包括每个用户的最小接收日期,请使用以下代码:

选择id,countdays作为发送的请求总数,minreceived min received 从…起 选择id、日期/部分日期、已更改-已接收为天、已接收 从temp1开始 其中更改>=作为foo接收 按id分组; 输出:

id发送的请求总数\u最小\u已接收 33 2 2019-02-18 18 1 2019-07-14 50 2 2019-01-19
这将对您有用:

选择id,countdays作为发送的请求总数 从…起 选择id,已更改-按天接收 从temp1到foo 其中天>0 按id分组; 这里的逻辑是减去两天,然后计算值为正的天数,即接收>更改

输出:

已发送的id请求总数 50 2 18 1 33 2 编辑

我现在只检查了你问题的另一部分!如果还希望包括每个用户的最小接收日期,请使用以下代码:

选择id,countdays作为发送的请求总数,minreceived min received 从…起 选择id、日期/部分日期、已更改-已接收为天、已接收 从temp1开始 其中更改>=作为foo接收 按id分组; 输出:

id发送的请求总数\u最小\u已接收 33 2 2019-02-18 18 1 2019-07-14 50 2 2019-01-19
我认为这是一个简单的聚合:

Select * 
from temp
INNER JOIN (
Select temp.id, MIN(temp.received) MinDate
From temp
group by temp.id
) t ON temp.id =t.id AND temp.received = t.MinDate

```

我认为这是一个简单的聚合:

Select * 
from temp
INNER JOIN (
Select temp.id, MIN(temp.received) MinDate
From temp
group by temp.id
) t ON temp.id =t.id AND temp.received = t.MinDate

```

id=18的计数不应该是1吗?是的,进行了编辑。id=18的计数不应该是1吗?是的,进行了编辑edit@4212extra让我知道这是否是你一直在寻找的,如果它的工作!运算符不存在:更改和接收子句的位置的间隔>整数作为日期类型存储在数据库中?它们是timpestamp和timpestamptz。将其更改为最新版本now@4212extra让我知道这是否是你一直在寻找的,如果它的工作!运算符不存在:更改和接收子句的位置的间隔>整数作为日期类型存储在数据库中?它们是timpestamp和timpestamptz。现在已将它们更改为最新版本,但如果更改的表也有不同的值,而我也想找到MINchanged呢?@4212extra。你应该用适当的样本数据和期望的结果问另一个问题。但是如果更改的表也有不同的值,而我也想找到MINchanged呢?@4212extra。你应该用适当的样本数据和期望的结果问另一个问题。
select id,
       count(*) as total_requests_sent
from temp
where received < changed
group by id;