gpt4 book ai didi

sql - 尽可能少地排列相邻值的数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:36 24 4
gpt4 key购买 nike

像这样的数组:

[google, google, yahoo, yahoo, yahoo, msn, msn, msn, google]

用尽可能少的相邻值排列它的最佳方式是什么?目标是得到这样的东西,例如:

[google, msn, yahoo, google, yahoo, msn, yahoo, msn, google]

更好的算法是确保任何相似的值尽可能远离彼此。

更好的办法是直接在 SQL 中执行。

我正在为我正在处理的发送时事通讯的脚本做这件事,我想避免一次向同一个域发送太多电子邮件。

[编辑] 我正在使用 MySQL

最佳答案

使用 SQL Server 2005 及更高版本,您可以利用 ROW_NUMBER 功能

  • 为每个项目添加一个行号,根据站点名称进行分区。
  • 从此子查询中选择
  • 按行号和姓名对结果进行排序。

您要求它们应尽可能远离彼此的要求可能无法满足,但总而言之,这就足够了。

SQL语句

SELECT  Site
FROM (
SELECT Site, o = ROW_NUMBER() OVER (PARTITION BY Site ORDER BY Site)
FROM q
) q
ORDER BY
o, Site

结果

google msn yahoo google msn yahoo google msn yahoo

测试脚本

;WITH q ([site])AS (
SELECT 'google'
UNION ALL SELECT 'google'
UNION ALL SELECT 'yahoo'
UNION ALL SELECT 'yahoo'
UNION ALL SELECT 'yahoo'
UNION ALL SELECT 'msn'
UNION ALL SELECT 'msn'
UNION ALL SELECT 'msn'
UNION ALL SELECT 'google'
)
SELECT Site
FROM (
SELECT Site, o = ROW_NUMBER() OVER (PARTITION BY Site ORDER BY Site)
FROM q
) q
ORDER BY
o, Site

关于sql - 尽可能少地排列相邻值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com