需要在 SQL 表中找到 Max 值并根据 MAX 值生成 Id
Posted
技术标签:
【中文标题】需要在 SQL 表中找到 Max 值并根据 MAX 值生成 Id【英文标题】:Need to find the Max value in a SQL table and Based on the MAX value need to generate the Id's 【发布时间】:2020-09-11 08:14:32 【问题描述】:Member_Id Interaction Status
971053019 1 1
971053019 2 1
971053019 3 1
971053019 4 0
971053019 1 1
971053019 2 0
971053019 1 0
971053019 1 0
971053019 1 1
971053019 2 1
971053019 3 0
971053019 1 0
对于上表,我需要为状态列生成 1
这里的重点是...,我们需要在交互列中找到最大值...对于该最大值,我们需要将状态列更新为 0...对于剩余的行,它应该是1.
我已经通过分组尝试使用 SQL Aggregated Max Value 函数,但我无法生成预期的结果集。请任何人帮助我使用 SQL 脚本。
【问题讨论】:
SQL 表代表 无序 集。您的结果似乎取决于排序,因此除非您有指定排序的列,否则无法解决此问题。 【参考方案1】:我认为这是一种差距和孤岛问题。您想在行上设置标志interaction
不大于“以下”interaction
。
为了使问题有意义,您需要一列来定义行的顺序。这没有显示在您的示例数据中,所以我假设id
。然后,您可以使用lead()
:
select
member_id,
interaction,
case when lead(interaction, 1, interaction) (over(partition by member_id order by id) > interaction
then 1
else 0
end as status
from mytable
【讨论】:
基于交互列Sequence set..需要为STATUS列生成Id(1 or 0)..**FOR EXAMPLE**上表中前四行会被处理作为一个序列集..所以在前四行中,最大值为 4,然后对于我们在状态列中分配 0 的 4 值...您能否建议我另一种方法 @Madhavenugopal:这就是查询的作用。你试过了吗? 是的,我已经尝试过......所以在上表中......如果你看到最后四行,最后四行的指标是 1,2,3 所以在这个特定的设置最大值是 3 那么对于我们在状态列中分配 0 的 3 值 ... @Madhavenugopal:好的,我想我误解了你的问题。我改变了答案。以上是关于需要在 SQL 表中找到 Max 值并根据 MAX 值生成 Id的主要内容,如果未能解决你的问题,请参考以下文章
请根据要求写出相应的sql语句:查询score表中,语文成绩的最高分?