SQL Order By和“Not-So-Much Group”

时间:2009-10-16 17:48:27

标签: sql sql-server tsql sql-server-2000 sql-order-by

让我说我有一张桌子:     --------------------------------------     | 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 = [

谢谢!

4 个答案:

答案 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简单得多。