69

SQL でデータ クエリを作成して、共通の日時にグループ化された行のグループに増分番号を付け、次の日時に「グループ番号」を増分し続けるなどしたいと考えています。これらの「グループ番号」は、partition by ステートメントを使用したときに見たように、グループごとにリセットしてはなりません。ここに私のサンプルデータがあります:

ts_DateTime          |ID   |Value|RowFilter|RequiredResult
--------------------------
2013/01/09 09:23:16  |8009 |0    |1        |1
2013/01/09 09:23:16  |8010 |0    |2        |1
2013/01/09 09:23:16  |8026 |0    |3        |1

2013/01/09 09:23:22  |8026 |0    |1        |2

2013/01/09 09:23:28  |8009 |0    |1        |3
2013/01/09 09:23:28  |8010 |0    |2        |3
2013/01/09 09:23:28  |8026 |0    |3        |3

2013/01/09 09:27:03  |8009 |0    |1        |4
2013/01/09 09:27:03  |8010 |0    |2        |4
2013/01/09 09:27:03  |8026 |0    |3        |4

2013/01/09 09:27:09  |8009 |0    |1        |5
2013/01/09 09:27:09  |8010 |0    |2        |5
2013/01/09 09:27:09  |8026 |0    |3        |5

2013/01/09 09:27:15  |8009 |0    |1        |6
2013/01/09 09:27:15  |8010 |0    |2        |6
2013/01/09 09:27:15  |8026 |0    |3        |6


これらの結果を取得するために使用しているクエリは次のとおりです。

select hl.ts_DateTime,  hl.Tagname as [ID],  hl.TagValue as [Value],
ROW_NUMBER() OVER (PARTITION BY hl.ts_datetime ORDER BY hl.tagname) AS RowFilter
from Table1 hl

基本的に、RowFilter 列を見ると、ts_DateTimeパーティションごとに一意の ROW 番号を取得しています。実際に必要なのは、各ts_DateTimeパーティションの RowFilter 列が Required 結果列のように見えることです。

4

3 に答える 3

120

を使用しないでくださいROW_NUMBER()

  • DENSE_RANK()代わりに使用
  • 削除するPARTITION BY

クエリ、

SELECT hl.ts_DateTime,  
       hl.Tagname as [ID],  
       hl.TagValue as [Value],
       DENSE_RANK() OVER (ORDER BY ts_datetime) AS RowFilter
FROM   Table1 hl 
ORDER  BY RowFilter
于 2013-01-16T13:56:10.143 に答える
10

私はあなたがこれを探していると思います:

ROW_NUMBER() OVER (PARTITION BY hl.id ORDER BY hl.ts_DateTime) AS RowFilter
于 2018-03-04T22:07:01.910 に答える