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

基于另一列日期的SQL返回日期

基于另一列日期的SQL返回日期,sql,Sql,我有一个降雨预测表,预测了两个城市的预期降雨日期。 该表如下所示: CREATE TABLE raincheck( city varchar(255), expected_rain_date date, actual_rain_date date); INSERT INTO raincheck (city,expected_rain_date,actual_rain_date) VALUES ('NYC','2001-02-02',null), ('NYC','2001-02-11',nul

我有一个降雨预测表,预测了两个城市的预期降雨日期。 该表如下所示:

CREATE TABLE raincheck(
city varchar(255),
expected_rain_date date,
actual_rain_date date);
INSERT INTO raincheck 
(city,expected_rain_date,actual_rain_date) VALUES 
('NYC','2001-02-02',null),
('NYC','2001-02-11',null),
('NYC','2001-03-20','2001-03-21'),
('NYC','2001-03-25',null),
('NYC','2001-04-10',null),
('NYC','2001-04-12','2001-04-12'),
('LDN','2001-02-03',null),
('LDN','2001-02-07','2001-02-07'),
('LDN','2001-03-11',null),
('LDN','2001-03-12',null),
('LDN','2001-03-17',null),
('LDN','2001-03-20','2001-03-20');
SELECT * FROM raincheck;
CREATE TABLE rainresult(
city varchar(255),
expected_rain_date date,
actual_rain_date date);
INSERT INTO rainresult
(city,expected_rain_date,actual_rain_date) VALUE
('NYC','2001-02-02','2001-03-21'),
('NYC','2001-03-25','2001-04-12'),
('LDN','2001-02-03','2001-02-07'),
('LDN','2001-03-11','2001-03-20');
SELECT * FROM rainresult;
由于实际降雨并不总是准确的,我需要一个表,其中包含第一个预期降雨日期和最近一个实际降雨日期之间的持续时间。结果如下所示:

CREATE TABLE raincheck(
city varchar(255),
expected_rain_date date,
actual_rain_date date);
INSERT INTO raincheck 
(city,expected_rain_date,actual_rain_date) VALUES 
('NYC','2001-02-02',null),
('NYC','2001-02-11',null),
('NYC','2001-03-20','2001-03-21'),
('NYC','2001-03-25',null),
('NYC','2001-04-10',null),
('NYC','2001-04-12','2001-04-12'),
('LDN','2001-02-03',null),
('LDN','2001-02-07','2001-02-07'),
('LDN','2001-03-11',null),
('LDN','2001-03-12',null),
('LDN','2001-03-17',null),
('LDN','2001-03-20','2001-03-20');
SELECT * FROM raincheck;
CREATE TABLE rainresult(
city varchar(255),
expected_rain_date date,
actual_rain_date date);
INSERT INTO rainresult
(city,expected_rain_date,actual_rain_date) VALUE
('NYC','2001-02-02','2001-03-21'),
('NYC','2001-03-25','2001-04-12'),
('LDN','2001-02-03','2001-02-07'),
('LDN','2001-03-11','2001-03-20');
SELECT * FROM rainresult;
我认为查询可能与NULL有关,比如 在实际降雨日期不为空的情况下,从降雨结果中选择*;
但是我无法筛选您希望根据每行上或之后的实际降雨日期计数分配组的预期降雨日期。然后汇总:

select city, min(expected_rain_date), max(actual_rain_date)
from (select rc.*,
             sum(case when actual_rain_date is not null then 1 else 0 end) over (partition by city order by expected_rain_date desc) as grp
      from raincheck rc
     ) rc
group by city, grp;
他是一把小提琴。它碰巧使用Postgres,但这都是标准SQL