Tsql Sybase ASE数据分组
我在Sybase ASE中有以下数据Tsql Sybase ASE数据分组,tsql,group-by,sap-ase,Tsql,Group By,Sap Ase,我在Sybase ASE中有以下数据 id effectiveDate lastModificationDate rateValue ----- ---------------- -------------------- ------------ 1 20130627 6/27/2013 3:27:09 AM 0 1 20130627 6/27/2013 4:39:10 A
id effectiveDate lastModificationDate rateValue
----- ---------------- -------------------- ------------
1 20130627 6/27/2013 3:27:09 AM 0
1 20130627 6/27/2013 4:39:10 AM 2.75
1 20130627 6/28/2013 3:48:15 AM 0
1 20130627 6/28/2013 4:36:43 AM 2.75
1 20130628 6/28/2013 3:48:14 AM 0
1 20130628 6/28/2013 4:36:42 AM 2.75
2 20130628 6/28/2013 4:36:42 AM .75
2 20130628 6/28/2013 3:48:14 AM 0
如何对其进行分组,以便只获取最后一行,即获取具有相同id+effectiveDate的最大lastModificationDate的行
因此,产出将是:
id effectiveDate lastModificationDate value
----- ---------------- -------------------- ------------
1 20130627 6/28/2013 4:36:43 AM 2.75
1 20130628 6/28/2013 4:36:42 AM 2.75
2 20130628 6/28/2013 4:36:42 AM .75
请注意,这将在TSQL(Sybase ASE 15)上进行。
编辑:已更改数据以使其更真实尝试:
SELECT t1.*
FROM Table1 t1
WHERE t1.lastModificationDate = (SELECT MAX(t2.lastModificationDate)
FROM Table1 t2
WHERE t2.effectiveDate = t1.effectiveDate
AND t2.id = t1.id)
Sybase文档:
子查询可以嵌套在外部查询的where或having子句中
在另一个子查询中选择、插入、更新或删除语句,
或者在选择列表中。或者,您可以编写许多语句
包含子查询作为联接;AdaptiveServer处理这样的语句
加入
避免使用子查询的另一个答案是
select id, effectiveDate, lastModificationDate, rateValue
from #mydata
group by id, effectiveDate
having lastModificationDate = max(lastModificationDate)
如果我假设您的数据存储在#mydata临时表中
create table #mydata(
id int null,
effectiveDate char(8) null,
lastModificationDate datetime null,
rateValue money null
)
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 1, "20130627", "6/27/2013 3:27:09 AM", 0
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 1, "20130627", "6/27/2013 4:39:10 AM", 2.75
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 1, "20130627", "6/28/2013 3:48:15 AM", 0
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 1, "20130627", "6/28/2013 4:36:43 AM", 2.75
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 1, "20130628", "6/28/2013 3:48:14 AM", 0
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 1, "20130628", "6/28/2013 4:36:42 AM", 2.75
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 2, "20130628", "6/28/2013 4:36:42 AM", .75
insert into #mydata(id, effectiveDate, lastModificationDate, rateValue) select 2, "20130628", "6/28/2013 3:48:14 AM", 0
Sybase子查询的唯一问题是只能有一列。考虑以下情况:另一个id重复相同的lastmodificationdate。编辑问题以反映我的评论。