使用每个日期的自定义记录顺序增强数据库表

时间:2012-12-18 08:20:02

标签: sqlite sql-order-by

想想当前的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);

1 个答案:

答案 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()