我在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)上。编辑:已更改数据以使其更逼真
发布于 2013-07-01 15:11:32
尝试:
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文档:
子查询可以嵌套在外部select、insert、update或delete语句的where或having子句中,也可以嵌套在另一个子查询或选择列表中。或者,您可以编写许多包含子查询的语句作为连接;Adaptive Server将这类语句处理为连接。
发布于 2013-08-07 23:47:15
避免使用子查询的另一个答案是...
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 https://stackoverflow.com/questions/17397062
复制相似问题