SQL 子查询:如何同时抓取包含 min(date) 和 min(hour) 的记录
SQL subquery: How to grap the record with both the min(date) and min(hour)
我有一个 table,我想从中获取第一个给出段落 IN ('B410','B420','C430','C440').所以,我想这意味着要查找最旧日期的记录,并在该最旧日期内查找具有最旧时间戳的记录。
我写了一个包含 2 个嵌套子查询的查询,但该查询不起作用(它给了我一个空结果)。我究竟做错了什么?奇怪的是,当更改语法以查找 max(fromdate) 和 max(hour) 时,我确实找到了带有 timstamp 22:18 的记录。但是我没有找到时间戳为 16:40 的记录,其中包含 min(fromdate) 和 min(hour)。
select v.id,
h.fromdate,
h.hour,
h.department,
h.room
from visit v
inner join visit_hist h
on v.id = h.id
where v.id in ('10251183')
and h.room in ('B410','B420','C430','C440')
and h.fromdate =
(select min(fromdate)
from visit_hist
where (id= h.id
and h.hour =
(select min(hour) from visit_hist where id= h.id and h.date = date
))
)
order by v.date,
v.visit_id;
有人可以帮我吗?
只需使用window函数:
select . . .
from visit v inner join
(select vh.*, row_number() over (partition by vh.id order by date asc, hour asc) as seqnum
from visit_hist vh
where vh.room in ('B410', 'B420', 'C430', 'C440')
) vh
on v.id = vh.id
where v.id in (10251183) and seqnum = 1;
注意:这给出了列表中第一个房间的 id
s。如果您想要第一个房间在列表中的 id
,则将 vh.room
上的条件移动到外部查询。
我有一个 table,我想从中获取第一个给出段落 IN ('B410','B420','C430','C440').所以,我想这意味着要查找最旧日期的记录,并在该最旧日期内查找具有最旧时间戳的记录。
我写了一个包含 2 个嵌套子查询的查询,但该查询不起作用(它给了我一个空结果)。我究竟做错了什么?奇怪的是,当更改语法以查找 max(fromdate) 和 max(hour) 时,我确实找到了带有 timstamp 22:18 的记录。但是我没有找到时间戳为 16:40 的记录,其中包含 min(fromdate) 和 min(hour)。
select v.id,
h.fromdate,
h.hour,
h.department,
h.room
from visit v
inner join visit_hist h
on v.id = h.id
where v.id in ('10251183')
and h.room in ('B410','B420','C430','C440')
and h.fromdate =
(select min(fromdate)
from visit_hist
where (id= h.id
and h.hour =
(select min(hour) from visit_hist where id= h.id and h.date = date
))
)
order by v.date,
v.visit_id;
有人可以帮我吗?
只需使用window函数:
select . . .
from visit v inner join
(select vh.*, row_number() over (partition by vh.id order by date asc, hour asc) as seqnum
from visit_hist vh
where vh.room in ('B410', 'B420', 'C430', 'C440')
) vh
on v.id = vh.id
where v.id in (10251183) and seqnum = 1;
注意:这给出了列表中第一个房间的 id
s。如果您想要第一个房间在列表中的 id
,则将 vh.room
上的条件移动到外部查询。