【发布时间】:2020-03-11 18:02:06
【问题描述】:
我的数据库中有 3 个表。表 A 包含项目的主要 ID 和标题。表 B 是项目的主要详细信息表,我们为对其进行的每次更新记录一条新记录。表 C 是可以添加到项目中的部门,每条记录可以有多个。
表 A
TAID | Name
-------------
1 | Test 1
2 | Test 2
3 | Test 3
表 B
TANo | TAID | Description | Completed
------------------------------------------------
1 | 1 | Some text | True
2 | 1 | More text | True
3 | 1 | Extra text | False
4 | 2 | Other text | True
5 | 2 | Test text | True
6 | 3 | Text | True
表 C
DivID | TANo | TAID | DivisionID
------------------------------------------------
1 | 1 | 1 | 1
2 | 1 | 1 | 2
3 | 2 | 1 | 2
4 | 3 | 1 | 2
5 | 6 | 3 | 4
我想要写一个查询,它可以让我提取一个 ID 的最新记录,但按部门细分。我的查询只是从表 B 到表 A 中获取最新的行,但我不知道如何根据我想获得 Division 1 的所有结果来查询我的结果?还是多个部门?
Select
ta.Name
,tb.TANo
,tb.TAID
,tb.Description
,tb.Completed
From
TableA ta
CROSS APPLY
(
Select
Top(1)
b.TANo
,b.TAID
,b.Description
,b.Completed
From
TableB as b
Where
b.TAID = ta.TAID
Order by b.TANo desc
) as tb
因此,作为一个示例,我可以拥有已对其进行多次更新的这条记录:
表 A
TAID | Name
-------------
2 | Test 2
表 B
TANo | TAID | Description | Completed
------------------------------------------------
4 | 2 | Other text | False
5 | 2 | Test text | True
表 C
DivID | TANo | TAID | DivisionID
------------------------------------------------
3 | 4 | 2 | 2
4 | 5 | 2 | 2
5 | 5 | 2 | 4
然后,如果我搜索第 2 和第 4 分区中的记录,则在上面的查询中添加一些内容,我可以拉回仅显示项目最新单条记录的结果
结果
TAID | TANo | Description | Completed
------------------------------------------------
2 | 5 | Test text | True
【问题讨论】:
标签: sql sql-server tsql where-clause greatest-n-per-group