我已經使用psql的排名和分區功能來創建一張表,描述了旅行拍攝的照片序列,其中id是圖片ID,nsid是攝影師ID,位置是拍攝照片的地方,排名是在旅行期間拍攝照片的順序(由相同的date_trunc時間段中的照片定義)。排名增加只爲行值的變化
id |nsid |location |date_taken |time_taken |date_trunc |rank
1 |[email protected] |11 |08/03/2006 |18:42:02 |2006-03-06 |1
2 |[email protected] |11 |08/03/2006 |18:56:44 |2006-03-06 |2
3 |[email protected] |446 |12/09/2007 |01:05:27 |2007-09-10 |1
4 |[email protected] |4 |12/09/2007 |01:05:35 |2007-09-10 |2
5 |[email protected] |4 |12/09/2007 |01:05:41 |2007-09-10 |3
6 |[email protected] |56 |12/09/2007 |01:05:45 |2007-09-10 |4
7 |[email protected] |11 |03/07/2008 |09:21:54 |2008-06-30 |1
8 |[email protected] |3199 |09/03/2013 |16:37:40 |2013-03-04 |1
9 |[email protected] |4 |09/03/2013 |18:56:55 |2013-03-04 |2
10 |[email protected] |215 |02/08/2007 |17:25:43 |2007-07-30 |1
11 |[email protected] |215 |03/08/2007 |19:35:11 |2007-07-30 |2
12 |[email protected] |203 |05/08/2013 |14:02:49 |2013-07-29 |1
13 |[email protected] |1 |05/08/2013 |18:08:45 |2013-07-29 |2
14 |[email protected] |1 |14/04/2013 |19:19:13 |2013-04-08 |1
15 |[email protected] |367 |04/06/2014 |18:54:13 |2014-06-02 |1
16 |[email protected] |2909 |28/08/2013 |23:20:27 |2013-08-26 |1
17 |[email protected] |183 |13/09/2013 |12:26:41 |2013-09-09 |1
18 |[email protected] |1149 |01/08/2013 |08:40:22 |2013-07-29 |1
19 |[email protected] |1149 |01/08/2013 |08:40:23 |2013-07-29 |2
20 |[email protected] |1149 |01/08/2013 |08:40:32 |2013-07-29 |3
21 |[email protected] |1149 |01/08/2013 |08:40:33 |2013-07-29 |4
22 |[email protected] |10 |02/07/2005 |18:17:26 |2005-06-27 |1
23 |[email protected] |10 |02/07/2005 |18:18:13 |2005-06-27 |2
我想創建一個名爲location_rank的新列,它是位置訪問順序的位置。因此,在同一次旅行中由相同用戶用戶在同一位置拍攝的照片將具有相同的location_rank,並且location_rank值只會增加該用戶旅行期間訪問的每個新位置(即僅當位置值從前一行改變時在分區中)。因此,所需的表是這樣的:
id |nsid |location |date_taken|time_taken|date_trunc |rank|location_rank
1 |[email protected] |11 |08/03/06 |18:42:02 |2006-01-01 |1 |1
2 |[email protected] |11 |08/03/06 |18:56:44 |2006-01-01 |2 |1
3 |[email protected] |446 |12/09/07 |01:05:27 |2007-01-01 |1 |1
4 |[email protected] |4 |12/09/07 |01:05:35 |2007-01-01 |2 |2
5 |[email protected] |4 |12/09/07 |01:05:41 |2007-01-01 |3 |2
6 |[email protected] |56 |12/09/07 |01:05:45 |2007-01-01 |4 |3
7 |[email protected] |11 |03/07/08 |09:21:54 |2008-01-01 |1 |1
8 |[email protected] |3199 |09/03/13 |16:37:40 |2013-01-01 |1 |1
9 |[email protected] |4 |09/03/13 |18:56:55 |2013-01-01 |2 |2
10 |[email protected] |215 |02/08/07 |17:25:43 |2007-01-01 |1 |1
11 |[email protected] |215 |03/08/07 |19:35:11 |2007-01-01 |2 |1
12 |[email protected] |203 |05/08/13 |14:02:49 |2013-01-01 |1 |1
13 |[email protected] |1 |05/08/13 |18:08:45 |2013-01-01 |2 |2
14 |[email protected] |1 |14/04/13 |19:19:13 |2013-01-01 |1 |1
15 |[email protected] |367 |04/06/14 |18:54:13 |2014-01-01 |1 |1
16 |[email protected] |2909 |28/08/13 |23:20:27 |2013-01-01 |1 |1
17 |[email protected] |183 |13/09/13 |12:26:41 |2013-01-01 |2 |2
18 |[email protected] |1149 |01/08/13 |08:40:22 |2013-01-01 |1 |1
19 |[email protected] |1149 |01/08/13 |08:40:23 |2013-01-01 |2 |1
20 |[email protected] |1149 |01/08/13 |08:40:32 |2013-01-01 |3 |1
21 |[email protected] |1149 |01/08/13 |08:40:33 |2013-01-01 |4 |1
22 |[email protected] |10 |02/07/05 |18:17:26 |2005-01-01 |1 |1
23 |[email protected] |10 |02/07/05 |18:18:13 |2005-01-01 |2 |1
24 |[email protected] |25 |12/03/11 |13:41:10 |2011-01-01 |1 |1
25 |[email protected] |25 |12/03/11 |13:42:19 |2011-01-01 |2 |1
26 |[email protected] |25 |12/03/11 |14:00:49 |2011-01-01 |3 |1
27 |[email protected] |25 |12/03/11 |14:07:57 |2011-01-01 |4 |1
28 |[email protected] |25 |12/03/11 |14:10:12 |2011-01-01 |5 |1
29 |[email protected] |105 |07/08/11 |02:43:45 |2011-01-01 |1 |1
30 |[email protected] |5 |07/08/11 |05:19:27 |2011-01-01 |2 |2
31 |[email protected] |966 |28/10/13 |20:19:05 |2013-01-01 |1 |1
32 |[email protected] |966 |28/10/13 |20:35:38 |2013-01-01 |2 |1
33 |[email protected] |966 |28/10/13 |20:35:55 |2013-01-01 |3 |1
34 |[email protected] |966 |28/10/13 |21:09:53 |2013-01-01 |4 |1
35 |[email protected] |966 |28/10/13 |21:27:50 |2013-01-01 |5 |1
36 |[email protected] |831 |27/09/14 |18:27:24 |2014-01-01 |1 |1
37 |[email protected] |3708 |09/10/14 |20:36:42 |2014-01-01 |2 |2
38 |[email protected] |42 |31/10/14 |12:23:50 |2014-01-01 |1 |1
39 |[email protected] |16 |28/08/09 |13:46:44 |2009-01-01 |1 |1
40 |[email protected] |186 |28/08/09 |14:17:39 |2009-01-01 |2 |2
41 |[email protected] |19 |28/08/09 |16:43:07 |2009-01-01 |3 |3
42 |[email protected] |2919 |29/08/09 |12:18:10 |2009-01-01 |4 |4
43 |[email protected] |2453 |29/08/09 |13:22:12 |2009-01-01 |5 |5
44 |[email protected] |262 |29/08/09 |15:59:14 |2009-01-01 |6 |6
45 |[email protected] |22 |30/08/09 |15:26:56 |2009-01-01 |7 |7
46 |[email protected] |33 |30/08/09 |16:25:30 |2009-01-01 |8 |8
47 |[email protected] |2914 |30/08/09 |21:29:39 |2009-01-01 |9 |9
48 |[email protected] |408 |03/09/09 |23:36:12 |2009-01-01 |10 |10
49 |[email protected] |133 |06/09/09 |21:57:03 |2009-01-01 |11 |11
50 |[email protected] |713 |16/09/09 |00:01:53 |2009-01-01 |12 |12
我使用DENSE_RANK函數嘗試,但我一直不成功。我非常感謝在創建location_rank列方面的幫助。
這裏是DENSE_RANK查詢,我已經試過unsuccesfully:
create table prep.location_rank2 as
select
id, nsid,
location,date_taken,time_taken,date_trunc, rank,
dense_rank() over(
partition by nsid, date_trunc
order by date_taken, time_taken, location, rank
) as location_rank
from prep.test
order by nsid;
請出示你'DENSE_RANK'試圖查詢和解釋它如何沒爲你工作。 –
結果與您的解釋不符。 –
使用您的數據,如果有另一個記錄nsid = 10000137 @ N04,位置= 446,date_taken = 12/09/2007和time_taken = 1:06:00,你想要什麼location_rank值? – etsa