除this question之外,我还要选择其他行。
我有以下表格:
Table1 Table2
CardNo ID Record Date ID Name Dept
1 101 8.00 11/7/2013 101 Danny Green
2 101 13.00 11/7/2013 102 Tanya Red
3 101 15.00 11/7/2013 103 Susan Blue
4 102 11.00 11/7/2013 104 Gordon Blue
5 103 12.00 11/7/2013
6 104 12.00 11/7/2013
7 104 18.00 11/7/2013
8 101 1.00 12/7/2013
9 101 10.00 12/7/2013
10 102 0.00 12/7/2013
11 102 1.00 12/7/2013
12 104 3.00 12/7/2013
13 104 4.00 12/7/2013
我希望结果如下:
Name Dept Record Date
Danny Green 8.00 12/7/2013
Tanya Red 11.00 11/7/2013
Susan Blue 12.00 11/7/2013
Gordon Blue 18.00 12/7/2013
我通过以下选择错误地获得了一个组:
select t2.Name, t2.Dept, min(t1.Record), t1.Date
from table1 t1
join table2 t2 on t2.ID = t1.ID
group by t2.ID, t2.Name, t2.Dept .
如果我替换t1.Date with min(t1.Date)
它看起来很好,但问题是没有选择相应的记录日期。如果你能帮助我,我会很高兴的!
答案 0 :(得分:2)
您按照与所选列不同的列进行分组,请尝试以下操作:
select t2.Name, t2.Dept, min(t1.Record), t1.Date
from table1 t1
join table2 t2 on t2.ID = t1.ID
group by t2.Name, t2.dept, t1.date
答案 1 :(得分:0)
以下是使用RANK
的选项:
SELECT
t.Name,
t.Dept,
t.Record,
t.Date
FROM
(
SELECT t1.*, t2.*,
RANK() OVER (PARTITION BY t2.ID ORDER BY t2.Record) rank
FROM Table2 t2
INNER JOIN Table1 t1
ON t1.ID = t2.ID
) t
WHERE t.rank = 1;
答案 2 :(得分:0)
你必须确保两件事。结果集中的每个非聚合列必须在组中出现。现在,您的结果集中只能有一个名称dept组合。所以你必须确保只有一行t1。 Normaly你会选择包含记录被破坏的第一个日期的行:
select t2.name,
t2.dept,
min(t1.record) as record,
min(t1.date) as date
from t1
join t2 on t2.id = t1.id
group by t1.id, t2.name, t2.dept