【发布时间】:2017-08-17 16:40:51
【问题描述】:
希望这个问题的答案很简单(看起来应该是这样,但我遗漏了一些东西)......我有一个简单的查询,可以从表中获取最小值(通过子查询),然后使用该最小值尝试获得一个简单的months_between最终结果
我试图尽可能简单地回答的问题是:最早的 end_date 是什么时候,这个 end_date 距离 report_date 有多远
这是查询
select end_date term_date, months_between (cast (report_date as date), cast (end_date as date)) term_length
from table1
where end_date =
(select min (end_date) end_date
from table1
where rec_load_date = (select max (rec_load_date) from table1)
and active_rec = 'Y' and end_date <= report_date);
我的问题是,虽然子查询完美运行,即我得到一个最小(结束日期)值,但在主查询中使用它会返回多条记录。 (见图片)
当前结果: 1. term_date = min(table1.end_date) 2. term_length = months_between value 比较 table1.report_date 和 table1.end_date(即 table1 中记录的实际 end_date 值)
当前结果(附图):
返回的记录示例(与 table1 中适用的 end_date 值一样多的行)
样本数据:
create table table1 (rec_load_date varchar(25), report_date as varchar (25), end_date as varchar (25));
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-02-28');
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-01-31');
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-04-30');
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-03-31');
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-01-31');
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-04-25');
insert into table1 (rec_load_date, report_date, end_date) values ('2017-08-10', '2017-07-31', '2017-01-31');
关于如何从查询中返回以下结果的任何想法:'2017-01-31', 6
【问题讨论】:
-
嗯,你有那些记录的 endDate 为 20170131,因此这些行被返回。这里的真正目标是什么?你想用这个查询回答什么问题。
-
嗨 scsimon,我想要得到的具体答案是:最早的 end_date 是什么,以及这个 end_date 距离 report_date 有多远
标签: sql group-by amazon-redshift