2012-12-18 18 views
1

認爲目前VISITS表:提高數據庫表,每個日期自定義記錄排序

ID ID_PERSON DATE 
1 1   10/12/2012 
2 5   10/12/2012 
3 11   10/12/2012 
4 55   10/13/2012 
5 12   10/13/2012 
6 6   10/14/2012 
7 10   10/15/2012 
8 13   10/15/2012 
9 11   10/15/2012 
10 5   10/16/2012 

我需要的是創造每天探訪的自定義排序:

訂購1, 2,日期2012年10月12日,1,2日期10/13/2012

起初它可以是隨機的,但然後用戶可以創建訂單,這不是我關心的這一點。

將SQL命令添加到此表的隨機排序列將是什麼?

可能的結果:

ID ID_PERSON DATE   ORDER_IN_DATE 
1 1   10/12/2012 2 
2 5   10/12/2012 3 
3 11   10/12/2012 1 
4 55   10/13/2012 1 
5 12   10/13/2012 1 
6 6   10/14/2012 1 
7 10   10/15/2012 1 
8 13   10/15/2012 3 
9 11   10/15/2012 2 
10 5   10/16/2012 1 

排序規則:隨機當第一次創建ORDER_BY_DATE列。 (當然,自動增加值也是隨機的)。

SOLUTION: a。更新表VISIT添加ORDER_IN_DATE列,b。執行以下查詢:

UPDATE VISIT 
SET ORDER_IN_DATE = (SELECT TEMP_ORDER 
        FROM (SELECT V.ID AS TEMP_ID, 1 + ROWID % (SELECT COUNT(*) 
                   FROM VISIT 
                   WHERE DATE = V.DATE 
                   ) AS TEMP_ORDER 
          FROM VISIT V 
          ORDER BY DATE, RANDOM()) 
        WHERE ID = TEMP_ID); 
+0

你不清楚你想要什麼輸出順序。你能舉一個例子,看看結果應該是什麼樣子,你的分類標準是什麼? – mvp

回答

1

如果我收到了你的問題的權利,你想按日期先排序,然後隨機之日起訪問。

在這種情況下,這應該爲你工作:

SELECT * FROM visits 
ORDER BY date, random() 

編輯

使用這個,如果你想要之日起保存以便作爲附加列order_in_date

SELECT *, 
    1 + rowid % (
     SELECT count(*) FROM visits 
     WHERE date = v.date 
    ) AS order_in_date 
FROM visits v 
ORDER BY date, random() 
+0

我想要保存訂單。 – iCantSeeSharp

+0

它是否必須是100%的SQL?使用某些腳本(Perl,PHP等)保存'random()'生成的命令很容易 – mvp

+0

是的,因爲它是模式更新,不能用代碼完成。 – iCantSeeSharp

相關問題