问题标签 [sql-rank]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - MySQL 同时选择多个 id 可选 id 和 php
我想通过改变场景来使这个请求复杂化。这是原始请求的链接。 这是原始请求的链接。
我有以下称为技能的 MySQL 表。
ID | idUser | 技能 |
---|---|---|
1 | 4 | 1 |
2 | 8 | 4 |
3 | 8 | 9 |
4 | 13 | 9 |
5 | 18 | 2 |
6 | 22 | 1 |
7 | 27 | 2 |
8 | 32 | 4 |
9 | 11 | 2 |
10 | 32 | 9 |
10 | 32 | 7 |
例如,我需要选择同时拥有 idSkill 4 和 9 的所有 idUser(强制性技能)。
但我希望有可能通过可选的 idSkills(如果有的话)进行搜索。
必修技能为 9 和 4
可选技能为7
结果将是 idUser 32。
我想到了这个查询:
但它显然不起作用。
非常感谢
sql - 使用 RANK OVER PARTITION 比较前一行结果
我正在使用包含(在其他列中)用户 ID 和 startDate 的数据集。目标是创建一个新列“isRehire”,将他们的 startDate 与之前的 startDates 进行比较。
如果 startDates 之间的差异在 1 年内,则 isRehire = Y。
当用户有超过 2 个 startDates 时,困难和我的问题就出现了。如果第 3 次和第 1 次 startDate 之间的差异超过一年,则第 3 次 startDate 将是重新雇用的新“基准日期”。
用户身份 | 开始日期 | 是重新雇用 |
---|---|---|
123 | 2019 年 7 月 24 日 | ñ |
123 | 02/04/20 | 是的 |
123 | 20 年 8 月 25 日 | ñ |
123 | 20 年 12 月 20 日 | 是的 |
123 | 21 年 6 月 15 日 | 是的 |
123 | 21 年 8 月 20 日 | 是的 |
123 | 21 年 8 月 30 日 | ñ |
在上面的示例中,您可以看到问题的可视化。第一个 startDate 07/24/19,用户不是 Rehire。第二个 startDate 02/04/20,他们是 Rehire。第3 次startDate 08/25/20 用户不是重新雇用,因为距离他们最初的 startDate 已经超过 1 年。这是新的“锚”日期。
接下来的 3 个实例都是 Y,因为它们在新的“锚定”日期 08/25/20 的 1 年内。21 年 8 月 30 日的最终开始日期是 2020 年 8 月 25 日过去一年多,表示“N”,“周期”再次重置,21 年 8 月 30 日作为新的“锚”日期。
我的目标是利用 RANK OVER PARTITION 来完成这项工作,因为从我的测试来看,我相信必须有一种方法可以将等级分配给日期,然后可以将其包装在 select 语句中以编写 CASE 表达式。尽管我完全有可能完全找错了树。
您可以在下面看到一些我尝试用来完成此操作的代码,尽管到目前为止还没有取得多大成功。
sql - 如果 RANK()+1 因 JOINS 溢出,则选择第一个排名
我有一个loop_msg
用msg_id
and调用的表content
。我有第二张桌子loop_msg_status
,用channel
and调用msg_id
。这用于在不同渠道中以循环方式发布消息,因此我需要跟踪msg_id
每个channel
.
通过这个查询,我可以msg_id
从content
每个channel
. 我也从 table得到那个msg_id
。如果有意义的话,我也会得到它和得到的。它有效。但是,如果是最高的,则不存在,我得到一个. 在这种情况下,我想从最低的is 中获取它的内容。我应该添加一个,如果是,在哪里?还是有更好的方法来做到这一点?rank
loop_msg
rank+1
rank+1
content
rank
rank+1
NULL
next_content
SELECT
rank
loop_msg
1
next_content
IF()
完整的 SQL 示例:
预期结果
sql - 选择具有下一行 ID 的行的问题
如果 RANK()+1 因 JOINS 溢出,此问题是 Select first rank 的后续问题
情景
我有一堆预定义的消息,只有当其他用户在每个机器人的消息之间发送 X 消息时,我的 Discord 和 Twitch 机器人每 30 分钟循环发送到专用频道。循环从一个通道到另一个通道是独立的。
SQL 表
当前查询
现在,我需要每 30 分钟获取一次channel_id
from inbetween >= 10
,msg_loop_status
下一条消息的content
fromloop_msg
和下一条msg_id
from ,loop_msg
因为在发布新消息后,我会将新消息UPDATE
的channel_id
行msg_id
设置inbetween
为 0。更具体地说,如果我们在loop_message
(最高msg_id
)结束时,我们需要从头(最低)重新开始循环msg_id
。
这是我目前的工作:
问题
当多个通道位于同一位置时(msg_id
不同channel_id
in相同loop_msg_status
),排序无法正常工作,并且 和 的值next_content
是next_msg_id
当前值。
期望
回到基础:如果channel_id
. _ 我为该频道存储了发送的内容,30 分钟后,我再次查询以查看我在哪里并发布下一个. 例如采取这一行:loop_msg_status
content
loop_msg
inbetween >= 10
msg_id
content
loop_msg_status
content
在做 my SELECT
in 的时候,msg_loop_status
since应该和后面的 next和它对应的 from一起选择,因为没有 a ,所以下一个实际上是。所以输出会是这样的:inbetween >= 10
channel_id
msg_id
4
content
msg_loop.
msg_id=5
6
将相同的逻辑应用于整个示例,我期待以下输出(不需要列,例如 currentmsg_id
和,但为了示例的可读性可以添加)。content
6 个频道中有 5 个有inbetween >= 10
,因此对于这些频道中的每一个,我都需要它们next_msg_id
,next_content
因此:
sql - 如何每周获取前 10 名数据(本周、前一周、上个月、2 个月前、3 个月前)
我想检索 Top 10 产品 - 每周
请帮助我了解如何从 SQL 查询中获取此类数据。谢谢