T-SQL:对分组和反向链接子记录进行分组和反向排序的复杂查询

时间:2013-07-01 02:48:50

标签: sql sql-server-2008

我有一个父表CASES和子表UPDATES。每日例程记录从CASESUPDATES表的每一行。这意味着每个CASE将有一个,然后是多个UPDATES

CaseID  | CaseStatus | [other fields]
==============================================
PK(int) | Free text  | Free text...

更新

UpdateID | UpdateDate   | CaseID  | CaseStatus | [other fields]
==============================================
PK(int)  | Date Entered | FK(int) | Free text  | Free text...

对于此方案,您可以假设可以创建CASES但不能删除。

我需要按照反向时间顺序对UPDATES表中的数据进行排序,以便所有最近的UPDATES先排序,然后倒排第二次UPDATES排序第二,等等。

我需要一个返回如下表格的查询 -

QUERY-RETURNED TABLE

SeqNo          | UpdateID | UpdateDate | CaseID | CaseStatus | [other fields]
=================================================================================
Calc'd (below) | [fields returned from UPDATES table]

SeqNo字段会以某种方式计算,如 -

(select CaseID, count(UpdateDate) as Total from UPDATES group by CaseID) -
(select Row_Number over (order by UpdateDate) as Step from UPDATES group by CaseID) +
1

因此,如果我们有两个CASES,而CASE 345有4个UPDATESCASE 789只有2个UPDATES,那么所需的查询将返回 - < / p>

SeqNo | UpdateID | UpdateDate  | CaseID | CaseStatus | [other fields]
====================================================================
1     | 9876     | 30-Jun-2013 | 345    | [free text...]
1     | 9875     | 30-Jun-2013 | 789    | [free text...]
2     | 9765     | 29-Jun-2013 | 345    | [free text...]
2     | 9764     | 29-Jun-2013 | 789    | [free text...]
3     | 9654     | 28-Jun-2013 | 345    | [free text...]
4     | 9653     | 27-Jun-2013 | 345    | [free text...]

问题 - 如何计算上面的SeqNo并使用它来返回所需的结果表?

0 个答案:

没有答案