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、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列时随机。(当然,自动增加的值也算随机)。

解决方案: 更新表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);
4

1 回答 1

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()
于 2012-12-18T08:42:25.207 回答