想想当前的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,3 的日期 10/12/2012 , 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
列时随机。 (当然,自动增加的值也是随机的)。
解:
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 :(得分: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()