【问题标题】:Get 10 random rows that change weekly (featured entries)获取 10 个每周更改的随机行(精选条目)
【发布时间】:2013-05-19 11:21:45
【问题描述】:

我尝试获取一个表的 10 个随机行。有很多类似的问题,但我还有一个附加条件:我希望这个列表每周更新一次,每年更新 52 次。这 10 件商品将成为“本周的随机精选商品”。

所以,我发现了每次调用脚本时随机行都会发生变化的 sn-p

select top 10 percent * from [yourtable] order by newid();

它的问题是我不能简单地添加一个种子,在这种情况下是week-of-year。知道如何实现吗?

【问题讨论】:

  • 为什么不每周运行一次随机化并将结果存储在另一个表中?
  • 我对你所追求的感到困惑,如果每周随机 10 次,重新运行此查询如何不起作用?此外,如果您真的只想要前 10 名,请从您的选择中删除“百分比”。
  • 为什么在展示TSQL代码的时候会有mysql和phpmyadmin标签?您实际使用的是 SQL Server 或 MySql 什么 RDBS?

标签: mysql sql select phpmyadmin


【解决方案1】:

您的代码示例是 T-SQL (SQL Server)。因此,在 SQL Server 中执行此操作非常简单:

select *
from (select t.*,
             row_number() over (partition by datepart(wk, thedate) order by newid()) as seqnum
      from [yourtable] t
     ) t
where seqnum <= 10;

MySQL 不支持row_number(),因此该数据库中的方法会有所不同。

【讨论】:

  • @poitroae 。 . . wkdatepart 函数的一个参数,它说“给我一年中的哪一周(严格来说,年份也应该包括在内)。文档位于 msdn.microsoft.com/en-us/library/ms174420(v=sql.105).aspxthedate 参数是任何日期您用来定义星期的列。
  • @poitroae 。 . . MySQL 中的解决方案完全不同。两个数据库中的方法完全没有相似之处。
  • 这就是我到目前为止所得到的,但我对整个语法有点困惑。 ideone.com/4U637b
猜你喜欢
  • 2022-11-12
  • 2019-03-30
  • 2013-01-03
  • 1970-01-01
  • 2020-12-29
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多