2010-12-27 17 views
0

私は時間の列でパーティションを使用するクエリを持っていますが、予期せぬ結果が出ています。 RNで1つ以上の1を取得するのはなぜですか? (:00:02:21に1つ100と21のための他の:00:02:600)このパーティションで何が問題になっていますか

SELECT TOP 500 
    ROW_NUMBER() OVER(
       PARTITION BY [Date], CAST([Time] AS Time(0)) 
       ORDER BY [DATE] ASC, CAST([Time] AS Time(0)) ASC 
       ) RN, 
       [DATE], 
       [Time]    
FROM [DB]..[TABLE] 
ORDER BY [Date] ASC, 
     [Time] ASC, 
     [RN] ASC 

結果:あなたは丸めご発注のためtime(0)にキャストを使用している

**1 2010-10-03 21:00:02.100** 
2 2010-10-03 21:00:02.100 
3 2010-10-03 21:00:02.200 
4 2010-10-03 21:00:02.200 
5 2010-10-03 21:00:02.200 
4 2010-10-03 21:00:02.500 
**1 2010-10-03 21:00:02.600** 
2 2010-10-03 21:00:02.600 
3 2010-10-03 21:00:02.600 
5 2010-10-03 21:00:02.700 
6 2010-10-03 21:00:02.700 
7 2010-10-03 21:00:02.700 
8 2010-10-03 21:00:02.700 
9 2010-10-03 21:00:02.700 
10 2010-10-03 21:00:02.700 
11 2010-10-03 21:00:02.700 
12 2010-10-03 21:00:02.700 
13 2010-10-03 21:00:02.700 
14 2010-10-03 21:00:02.700 
15 2010-10-03 21:00:02.700 
16 2010-10-03 21:00:02.700 
17 2010-10-03 21:00:02.700 
18 2010-10-03 21:00:02.700 
19 2010-10-03 21:00:02.700 
20 2010-10-03 21:00:02.700 
21 2010-10-03 21:00:02.700 
22 2010-10-03 21:00:02.700 
+1

書式コードに中括弧ボタンを使用してください... – gbn

+0

は今ことを試みたが、どのように構文の色分けを得るのですか? – nojetlag

答えて

2

を( truncates?)時間を2番目の精度に変換します。これは宣伝どおりに働いて...

編集されています

それは同じBY PARTITIONとORDER BYを持ってしても意味がありません...

私の推測では、あなたがして、パーティションしようとしているということです第二、およびたくその区間内の行番号

これを試してみてください:

ROW_NUMBER() OVER(
      PARTITION BY [Date], CAST([Time] AS Time(0)) 
      ORDER BY [DATE], [Time] 
      ) RN 

あなたは0.5秒の境界を横切る重複行番号を取得する場合、FORCにこれを使用電子いうし、たくさんのご意見をお寄せためROUND

ROW_NUMBER() OVER(
      PARTITION BY [Date], CAST([Time] - '00:00:00.5000' AS Time(0)) 
      ORDER BY [DATE], [Time] 
      ) RN 
0

感謝を切り捨て、(私は2回1を与える)キャストがそれを丸め、したがって、その動作していないことが判明。 [TIME]から抜けてもうまくいかなかったので、エラーが発生しました。終わりに、私が望んでいたとして、それが働いて得るために、このコードを使用:

ROW_NUMBER() OVER( PARTITION BY CONVERT(nvarchar(8), [Time], 8) ORDER BY [Date], [Time]) RN FROM [DB]..[TABLE]

関連する問題