0
Table_A

A_id          
1     



Tale_B
B_id       A_id
1            1
2            1
3            1

Table_C

B_id      Process_date
1   20130101 12:20:01
2   20130101 12:10:01
3   20130101 13:00:01

如何根据 Table_C 计时窗口使用 Table_A A_id 的引用从 Table_C 中检索最大 process_date。如果我想在计时窗口 20130101 12:09:00 到 12:21:00 中检索 Table_C id 和 max(process_date) 那么它应该返回id 为 1 和 process_date 为 12:20:01

4

2 回答 2

1

您可以使用获取以下内容的子查询max(process_date)

select c1.b_id,
  c2.MaxDate
from table_a a
inner join table_b b
  on a.a_id = b.a_id
inner join table_c c1
  on b.b_id = c1.b_id
inner join
(
  select max(process_date) MaxDate
  from table_c
) c2
  on c1.process_date = c2.maxdate;

请参阅带有演示的 SQL Fiddle

或者您可以使用row_number()

select b_id, process_date
from 
(
  select c1.b_id,
    c1.process_date,
    row_number() over(partition by a.a_id order by c1.process_date desc) rn
  from table_a a
  inner join table_b b
    on a.a_id = b.a_id
  inner join table_c c1
    on b.b_id = c1.b_id
) 
where rn = 1

请参阅带有演示的 SQL Fiddle

于 2013-03-05T21:36:03.880 回答
0

此查询应该为您process_date提供每个B_id参考的最大值Table_A

SELECT c.B_id, MAX(Process_date)
FROM Table_C c
INNER JOIN Table_B b 
    ON b.B_id = c.B_id
INNER JOIN Table_A a
    ON a.A_ID = b.A_id
GROUP BY c.B_id

只需c.B_id从选择中删除 ,GROUP BY如果您想要process_date所有 B_id 的最大值并引用Table_A.

SQL小提琴

于 2013-03-05T21:44:00.027 回答