我有几个不相关的表,我一直在尝试将它们连接在一起,而我的问题来自于一个列获取第一个结果,这会产生不准确的数据。这是通过日期字段进行增强的,但我无法让它产生所需的结果。
表a:
地点 | 公司 | 日期 |
---|---|---|
321 | 111 | 1/1 |
123 | 222 | 2/2 |
321 | 222 | 3/3 |
123 | 111 | 4/4 |
表b:
工作 | 地点 |
---|---|
zz | 321 |
xxx | 123 |
select a.companies, b.locations, b.job
where a.locations=b.locations
group by b.job
还有其他尝试,但所有这些都返回无效结果。我什至尝试了一个案例 a.companies > 1,并对其进行子查询。作为一个菜鸟,我可能已经达到了极限。
a.companies有没有办法返回a.dates中最新日期的结果?
最终结果应如下所示:
公司 | 地点 | 工作 |
---|---|---|
222 | 321 | zz |
111 | 123 | xxx |
相反,它获取 a.companies 中找到的第一个结果(作为第一个结果):
公司 | 地点 | 工作 |
---|---|---|
111 | 321 | zz |
222 | 123 | xxx |
我能够通过使用 ROW_NUMBER() 并加入表 a 上的行号来解决我的问题。这个问题可以结束了。最终查询如下所示:
SELECT location, company
from (select
a.location,
b.company,
a.date,
row_number() over(partition by a.location order by a.date DESC) rn
where a.job=b.job
group by a.location, b.company, a.date
order by b.company, a.date DESC) t
where t.rn = 1
group by company, location
order by company;