Tsql 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

我在Sybase ASE中有以下数据

   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。编辑问题以反映我的评论。