Sqlite 通过按日期自定义记录顺序增强数据库表
想想当前的Sqlite 通过按日期自定义记录顺序增强数据库表,sqlite,sql-order-by,Sqlite,Sql Order By,想想当前的访问表: 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
访问
表:
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
我需要的是创建每天访问的自定义顺序:
日期为2012年12月10日的订单为1,2,3,日期为2012年13月10日的订单为1,2等
一开始它可以是随机的,但是用户可以创建订单,这一点我并不关心
向该表中添加随机排序列的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
订购规则:首次创建“按日期订购”列时为随机。(当然,自动增加值也是随机的)
解决方案:
a.更新表访问在日期列中添加订单,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);
如果我答对了你的问题,你想先按日期排序,然后在日期内随机访问
在这种情况下,这应该适用于您:
SELECT * FROM visits
ORDER BY date, random()
编辑:
如果要将日期内订单保存为日期中的附加列,请使用此选项:
SELECT *,
1 + rowid % (
SELECT count(*) FROM visits
WHERE date = v.date
) AS order_in_date
FROM visits v
ORDER BY date, random()
如果我答对了你的问题,你想先按日期排序,然后在日期内随机访问
在这种情况下,这应该适用于您:
SELECT * FROM visits
ORDER BY date, random()
编辑:
如果要将日期内订单保存为日期中的附加列,请使用此选项:
SELECT *,
1 + rowid % (
SELECT count(*) FROM visits
WHERE date = v.date
) AS order_in_date
FROM visits v
ORDER BY date, random()
不清楚您想要什么输出顺序。你能举例说明结果应该是什么样的,你的排序标准是什么吗?你想要什么样的输出顺序还不清楚。你能举个例子说明结果应该是什么样的,你的排序标准是什么吗?我想保存顺序。它必须是100%SQL吗?使用一些脚本(Perl、PHP等)很容易保存由random()
生成的顺序是的,因为这是一个模式更新,不能用代码来完成。我已经彻底检查了它-在您的示例中效果很好。你确定它不起作用吗?对不起,我的错。我没有注意到日期年的不同。我希望保存订单。它必须是100%SQL吗?使用一些脚本(Perl、PHP等)很容易保存由random()
生成的顺序是的,因为这是一个模式更新,不能用代码来完成。我已经彻底检查了它-在您的示例中效果很好。你确定它不起作用吗?对不起,我的错。我没有注意到年份的不同。