Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
Calkins
Starting Member
5 Posts |
Posted - 2012-12-30 : 09:40:23
|
I thought that function ROW_NUMBER with PARTITION works different for example:SELECT * INTO #tmp_GridResults_1FROM (SELECT N'13' AS [State_ID], N'2012-10-23 00:00:00.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 00:00:01.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 00:00:12.727' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 00:43:59.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 04:00:11.467' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 04:01:20.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:00:11.430' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:20.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:33.297' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:45.803' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 05:23:46.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 05:23:58.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:58.160' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:24:10.990' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:11.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:25.973' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:26.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:40.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-24 00:00:00.000' AS [Value_Time], N'0' AS [Value] ) t;SELECT [State_ID], [Value_Time], [Value]FROM #tmp_GridResults_1ORDER BY Value_TimeSELECT State_ID ,Value_Time ,ROW_NUMBER() OVER (PARTITION BY State_ID ORDER BY Value_Time ) AS RowNumber_PartitionFROM #tmp_GridResults_1ORDER BY Value_TimeDROP TABLE #tmp_GridResults_1GO gives me this result:State_ID Value_Time RowNumber_Partition I_thought_will_be_this13 2012-10-23 00:00:00.000 1 113 2012-10-23 00:00:01.000 2 25 2012-10-23 00:00:12.727 1 -> new State_ID 113 2012-10-23 00:43:59.000 3 -> new State_ID 1 13 2012-10-23 04:00:11.467 4 213 2012-10-23 04:01:20.000 5 35 2012-10-23 05:00:11.430 2 -> new State_ID 15 2012-10-23 05:23:20.000 3 25 2012-10-23 05:23:33.297 4 35 2012-10-23 05:23:45.803 5 4 13 2012-10-23 05:23:46.000 6 -> new State_ID 113 2012-10-23 05:23:58.000 7 25 2012-10-23 05:23:58.160 6 -> new State_ID 15 2012-10-23 05:24:10.990 7 227 2012-10-23 05:24:11.000 1 -> new State_ID 127 2012-10-23 05:24:25.973 2 227 2012-10-23 05:24:26.000 3 327 2012-10-23 05:24:40.000 4 45 2012-10-24 00:00:00.000 8 -> new State_ID 1 I thought PARTITION BY reset count for every time State_ID change?How can i get results like in column "I_thought_will_be_this"?Thx in advance for help. |
|
sodeep
Master Smack Fu Yak Hacker
7174 Posts |
Posted - 2012-12-30 : 10:29:16
|
Do thisSELECT identity(int,1,1) ID ,* INTO #tmp_GridResults_1FROM (SELECT N'13' AS [State_ID], N'2012-10-23 00:00:00.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 00:00:01.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 00:00:12.727' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 00:43:59.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 04:00:11.467' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 04:01:20.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:00:11.430' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:20.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:33.297' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:45.803' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 05:23:46.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'13' AS [State_ID], N'2012-10-23 05:23:58.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:23:58.160' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-23 05:24:10.990' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:11.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:25.973' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:26.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'27' AS [State_ID], N'2012-10-23 05:24:40.000' AS [Value_Time], N'0' AS [Value] UNION ALLSELECT N'5' AS [State_ID], N'2012-10-24 00:00:00.000' AS [Value_Time], N'0' AS [Value] ) t;; With CTE as(SELECT State_ID ,Value_Time ,ROW_NUMBER() OVER (PARTITION BY State_ID ORDER BY Value_Time ) AS RowNumber_Partition ,ID,ID - ROW_NUMBER() OVER (PARTITION BY State_ID ORDER BY Value_Time ) as DifferenceFROM #tmp_GridResults_1)Select *,ROW_NUMBER() OVER (PARTITION BY State_ID,Difference Order by Difference desc) as Seqfrom CTEOrder by IDState_ID Value_Time RowNumber_Partition ID Difference Seq13 2012-10-23 00:00:00.000 1 1 0 113 2012-10-23 00:00:01.000 2 2 0 25 2012-10-23 00:00:12.727 1 3 2 113 2012-10-23 00:43:59.000 3 4 1 113 2012-10-23 04:00:11.467 4 5 1 213 2012-10-23 04:01:20.000 5 6 1 35 2012-10-23 05:00:11.430 2 7 5 15 2012-10-23 05:23:20.000 3 8 5 25 2012-10-23 05:23:33.297 4 9 5 35 2012-10-23 05:23:45.803 5 10 5 413 2012-10-23 05:23:46.000 6 11 5 113 2012-10-23 05:23:58.000 7 12 5 25 2012-10-23 05:23:58.160 6 13 7 15 2012-10-23 05:24:10.990 7 14 7 227 2012-10-23 05:24:11.000 1 15 14 127 2012-10-23 05:24:25.973 2 16 14 227 2012-10-23 05:24:26.000 3 17 14 327 2012-10-23 05:24:40.000 4 18 14 45 2012-10-24 00:00:00.000 8 19 11 1 |
|
|
jeffw8713
Aged Yak Warrior
819 Posts |
Posted - 2012-12-30 : 10:31:20
|
You are partitioning the data by State_ID - based on the order of the value_time within each state_id. If you change your query and order the results by State_ID and Value_Time instead of just Value_Time you will see why the row_number function is giving you those values.If you need the results you have outlined - you will need something else to identify how the data should be partitioned. |
|
|
ScottPletcher
Aged Yak Warrior
550 Posts |
Posted - 2012-12-31 : 11:56:06
|
quote: I thought PARTITION BY reset count for every time State_ID change?
The PARTITION BY is partitioning the table, not the rows in sequence. So, for a single PB column, all rows with a given column value will fall into a single partition. |
|
|
|
|
|
|
|