SQL Select,与最近10条记录不同

时间:2015-07-17 23:53:22

标签: sql select

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




5 个答案:

答案 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;

不同的数据库可能具有limitrand()和日期/时间函数的不同语法。上面给出了查询的结构,但功能可能不同。

如果您有大量数据并且性能是一个问题,那么还有其他(更复杂的)方法可以随机抽样。

答案 3 :(得分:0)

您可以将SELECT用于SQL Server 对于MYSQL,您可以使用TOP function

答案 4 :(得分:0)

也许这会有所帮助......

SELECT TOP number|percent column_name(s)
FROM table_name;

来源:http://www.w3schools.com/sql/sql_top.asp