Sql server 在一个查询中按两次使用tsql分区

Sql server 在一个查询中按两次使用tsql分区,sql-server,tsql,partition,Sql Server,Tsql,Partition,我有一个包含组1、组2和日期字段的表 如果运行此查询,我将得到以下结果: SELECT [group1] ,[group2] ,[date] ,ROW_NUMBER() over (PARTITION by [group1] order by [date]) as ord FROM [dev_DP].[dbo].[myTable] +--------+--------+-------------------------+-----+ | group1 | group2 |

我有一个包含组1、组2和日期字段的表

如果运行此查询,我将得到以下结果:

SELECT 
   [group1]
  ,[group2]
  ,[date]
  ,ROW_NUMBER() over (PARTITION by [group1] order by [date]) as ord
FROM [dev_DP].[dbo].[myTable]

+--------+--------+-------------------------+-----+
| group1 | group2 |          date           | ord |
+--------+--------+-------------------------+-----+
| dan    | alarm  | 2014-05-14 12:00:00.000 |   1 |
| dan    | snooze | 2014-05-14 12:30:00.000 |   2 |
| dan    | snooze | 2014-05-14 12:50:00.000 |   3 |
| jim    | snooze | 2014-05-14 11:00:00.000 |   1 |
| jim    | snooze | 2014-05-14 12:45:00.000 |   2 |
| jim    | alarm  | 2014-05-14 13:45:00.000 |   3 |
+--------+--------+-------------------------+-----+
我想添加另一列,该列将根据group 1和group 2字段向表中添加行号,但仅保留group 1的日期顺序。我想要的结果如下:

+--------+--------+---------------------+-----+------+
| group1 | group2 |        date         | ord | ord2 |
+--------+--------+---------------------+-----+------+
| dan    | alarm  | 2014-05-14 12:00:00 |   1 |    1 |
| dan    | snooze | 2014-05-14 12:30:00 |   2 |    1 |
| dan    | snooze | 2014-05-14 12:50:00 |   3 |    2 |
| jim    | snooze | 2014-05-14 11:00:00 |   1 |    1 |
| jim    | snooze | 2014-05-14 12:45:00 |   2 |    2 |
| jim    | alarm  | 2014-05-14 13:45:00 |   3 |    1 |
+--------+--------+---------------------+-----+------+
我该怎么做

谢谢
Dan

如果我切换这些术语:

  SELECT 
  [group1]
  ,[group2]
  ,[date]

  ,ROW_NUMBER() over (PARTITION by [group1], [group2] order by [date]) as ord2
  ,ROW_NUMBER() over (PARTITION by [group1] order by [date]) as ord1
  FROM [dev_DP].[dbo].[myTable]
我以为这给了我想要的结果,但它没有…如果我添加另一条记录,你可以看到错误

+--------+--------+-------------------------+------+------+
| group1 | group2 |          date           | ord2 | ord1 |
+--------+--------+-------------------------+------+------+
| dan    | alarm  | 2014-05-14 12:00:00.000 |    1 |    1 |
| dan    | snooze | 2014-05-14 12:30:00.000 |    1 |    2 |
| dan    | snooze | 2014-05-14 12:50:00.000 |    2 |    3 |
| dan    | alarm  | 2014-05-14 13:00:00.000 |    2 |    4 |
| jim    | snooze | 2014-05-14 11:00:00.000 |    1 |    1 |
| jim    | snooze | 2014-05-14 12:45:00.000 |    2 |    2 |
| jim    | alarm  | 2014-05-14 13:45:00.000 |    1 |    3 |
+--------+--------+-------------------------+------+------+

如果在SSMS中执行查询,请将结果输出设置更改为“Results to Text”,并将结果粘贴到代码后。照目前的情况,这是非常困难的视觉解析。对不起-应该先检查它。谢谢。你确定第二个结果是你想要的吗?我无法在
ord2
的值中发现明显的模式。是的-我确定-因此,我的想法是,对于给定的组1,我希望获得“报警”序列中的第一个,以及“打盹”序列中的第一个。要做到这一点,必须对组1进行分组,然后按日期排序。这几乎是我想要的,但不是按日期排序。我需要的是按组1分组,然后按日期排序,然后按组2的行数排序。
+--------+--------+-------------------------+------+------+
| group1 | group2 |          date           | ord2 | ord1 |
+--------+--------+-------------------------+------+------+
| dan    | alarm  | 2014-05-14 12:00:00.000 |    1 |    1 |
| dan    | snooze | 2014-05-14 12:30:00.000 |    1 |    2 |
| dan    | snooze | 2014-05-14 12:50:00.000 |    2 |    3 |
| dan    | alarm  | 2014-05-14 13:00:00.000 |    2 |    4 |
| jim    | snooze | 2014-05-14 11:00:00.000 |    1 |    1 |
| jim    | snooze | 2014-05-14 12:45:00.000 |    2 |    2 |
| jim    | alarm  | 2014-05-14 13:45:00.000 |    1 |    3 |
+--------+--------+-------------------------+------+------+