我有一张名为“dutyroster”的桌子。我想从这个表的“名称”列中随机选择,但是,我希望选择与最后10个记录不同,这样同一个人在10天内不会获得第二个任务。这可能吗?

答案 0 :(得分:0)
创建一个临时表,其中只有一列名为oldnames,最初没有记录。对于每个选择,执行类似
的查询 select names from dutyroster where dutyroster.names not in (select oldnamesfrom temporarytable) limit 10
并在执行完成后将结果集添加到临时表
答案 1 :(得分:0)
此处的另一个答案是解决有关如何避免重复选择的问题部分。
要完成选择的随机部分,请直接在select语句中使用newid()
。我以sqlfiddle为例。
SELECT TOP 10
newid() AS [RandomSortColumn],
*
FROM
dutyroster
ORDER BY
[RandomSortColumn] ASC
继续执行查询,您将获得不同的结果。在另一个答案中使用该技术可以避免让一个人加倍。
答案 2 :(得分:0)
基本思路是使用子查询来获取过去十天内的所有用户,然后对其余用户进行随机排序:
select dr.*
from dutyroster dr
where dr.name not in (select dr2.name
from dutyroster dr2
where dr2.datetimecol >= date_sub(curdate(), interval 10 day)
)
order by rand()
limit 1;
不同的数据库可能具有limit
,rand()
和日期/时间函数的不同语法。上面给出了查询的结构,但功能可能不同。
如果您有大量数据并且性能是一个问题,那么还有其他(更复杂的)方法可以随机抽样。
答案 3 :(得分:0)
您可以将SELECT
用于SQL Server
对于MYSQL,您可以使用TOP function
答案 4 :(得分:0)
也许这会有所帮助......
SELECT TOP number|percent column_name(s)
FROM table_name;