让我说我有一张桌子: -------------------------------------- | ID |日期| GROUP |结果| -------------------------------------- | 1 | 01/06 | Group1 | 12345 | | 2 | 01/05 | Group2 | 54321 | | 3 | 01/04 | Group1 | 11111 | --------------------------------------
我想在最近的日期在顶部订购结果,但是将“group”列分组在一起,但仍然有不同的条目。我想要的结果是:
1 | 01/06 | Group1 | 12345
3 | 01/04 | Group1 | 11111
2 | 01/05 | Group2 | 54321
获得该结果的查询是什么?
谢谢你!编辑:
我正在使用MSSQL。我将研究将oracle查询转换为MS SQL并报告我的结果。
修改
SQL Server 2000,因此不支持OVER / PARTITION = [
谢谢!
答案 0 :(得分:2)
您应该指定您正在使用的RDBMS。这个答案适用于Oracle,可能不适用于其他系统。
SELECT * FROM table
ORDER BY MAX(date) OVER (PARTITION BY group) DESC, group, date DESC
答案 1 :(得分:1)
使用带有两个参数的order by
子句:
...order by group, date desc
这假设您的日期列确实包含日期而不是varchars
答案 2 :(得分:1)
declare @table table (
ID int not null,
[DATE] smalldatetime not null,
[GROUP] varchar(10) not null,
[RESULT] varchar(10) not null
)
insert @table values (1, '2009-01-06', 'Group1', '12345')
insert @table values (2, '2009-01-05', 'Group2', '12345')
insert @table values (3, '2009-01-04', 'Group1', '12345')
select t.*
from @table t
inner join (
select
max([date]) as [order-date],
[GROUP]
from @table orderer
group by
[GROUP]
) x
on t.[GROUP] = x.[GROUP]
order by
x.[order-date] desc,
t.[GROUP],
t.[DATE] desc
答案 3 :(得分:0)
SELECT table2.myID,
table2.mydate,
table2.mygroup,
table2.myresult
FROM (SELECT DISTINCT mygroup FROM testtable as table1) as grouptable
JOIN testtable as table2
ON grouptable.mygroup = table2.mygroup
ORDER BY grouptable.mygroup,table2.mydate
SORRY,无法使用保留名称的列,重命名列以使其正常工作:)
这比接受的答案btw简单得多。