sql - 如何从连接表中返回一行
问题描述
字段类型:
Date1 = varchar(10)
Date2 = int
表:
tblName
Num(pk) Name Open
0909 John Doe Yes
0908 Jason Kelly Yes
tblOwes
Num(pk) Date1 Date2 Amnt Type
0909 11/14/2020 20201114 350.00 12
0909 11/15/2020 20201115 250.00 12
0909 10/29/2020 20201029 650.00 13
0909 09/12/2020 20200912 898.00 12
0908 08/29/2020 20200829 650.00 12
0908 09/15/2020 20200915 250.00 12
0908 09/14/2020 20200914 350.00 12
0908 08/12/2020 20200812 898.00 13
询问:
select tn.Num, tn.Name, to.Date1, to.Amnt
from tblName tn
inner join tblOwes to
on tn.Num = to.Num
where to.Date1 = (select top 1 to.Date1 from tblOwes where to.Num = tn.Num order by to.Date1 Desc)
对于Type 为 12 且 Open 为 Yes的每个帐户,我只想要一个条目tblOwes
,即最新的按列Date1
tblName
期望的结果:
Num Name Date1 Amnt Type Open
0909 John Doe 11/15/2020 250.00 12 Yes
0908 Jason Kelly 09/15/2020 250.00 12 Yes
现在它为 John 返回四个条目,为 Jason 返回四个条目
解决方案
也许这是您正在寻找的查询
with o_cte as (
select *, row_number() over (partition by num order by date1 desc) as rn
from tblOwes
where [Type]=12)
select n.Num, t.[Name], o.Date1, o.Amnt, o.[Type], n.[Open]
from tblName n
join o_cte o on n.Num = o.Num
where n.[Open]='Yes'
and o.rn=1
order by n.Num desc;
或者,如果 tblNames 表中的 'Name' 是唯一的(跨越 'num'),那么 PARTITION BY 将为 n.[Name] 并且查询可能如下所示
with o_cte as (
select o.*, row_number() over (partition by n.[Name] order by date1 desc) as rn
from tblName n
join tblOwes o on n.Num = o.Num
where o.[Type]=12
and n.[Open]='Yes')
select n.Num, t.[Name], o.Date1, o.Amnt, o.[Type], n.[Open]
from tblName n
join o_cte o on n.Num = o.Num
where
and o.rn=1
order by n.Num desc;
推荐阅读
- r - 如何比较R中的两个列表
- uwp - 将弹出限制到当前 AppWindow 的边界
- python - 我无法将 Python 输出导出到 Excel 文件
- python - Using aggregate and join on all columns except a few
- python - 2 variables = 1 other variables
- python - How to bypass self signed certificate verify in python pika to rabbitmq?
- flutter - Running Firestore transaction at same location is crashing the app
- perl - Perl获取特定日期前十天的日期
- sql - 根据条件连接多个表
- python - 在字符串中查找文本并打印多个结果