0
Table 1:
id  |       date      | value
1    15/04/2013 15:45    1
1    15/04/2013 15:55    1
2    16/04/2013 15:45    2
2    16/04/2013 15:55    2
3    17/04/2013 15:25    3
3    17/04/2013 15:35    3 

使用查询后

Select * 
from (
    Select *, ROW_NUMBER() OVER (Partition by id, date ORDER BY date DESC) from table X
) A

除了出现在同一天但不同时间的行之外,它正确地对所有行进行排名。

换句话说,我想编写可以按日期排序然后按时间排序的 sql。

4

2 回答 2

1

你在找这个吗?

SELECT a.* 
FROM (
    SELECT x.*, ROW_NUMBER() OVER (PARTITION BY id, DATEADD(dd, 0, DATEDIFF(dd, 0, date)) ORDER BY date DESC) rownum
      FROM table1 x
) A

样本输出:

| 身份证 | 日期 | 价值 | 行号 |
-------------------------------------------------- ----
| 1 | 2013 年 4 月 15 日 15:55:00+0000 | 1 | 1 |
| 1 | 2013 年 4 月 15 日 15:45:00+0000 | 1 | 2 |
| 2 | 2013 年 4 月 16 日 15:55:00+0000 | 2 | 1 |
| 2 | 2013 年 4 月 16 日 15:45:00+0000 | 2 | 2 |
| 3 | 2013 年 4 月 17 日 15:35:00+0000 | 3 | 1 |
| 3 | 2013 年 4 月 17 日 15:25:00+0000 | 3 | 2 |

这是SQLFiddle演示

于 2013-06-13T06:38:35.243 回答
0

尝试

order by convert(datetime, date, 103) DESC
于 2013-06-13T06:38:04.110 回答