需要在 SQL 表中找到 Max 值并根据 MA​​X 值生成 Id

Posted

技术标签:

【中文标题】需要在 SQL 表中找到 Max 值并根据 MA​​X 值生成 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 值并根据 MA​​X 值生成 Id的主要内容,如果未能解决你的问题,请参考以下文章

SQL外连接结合右表中的MAX函数

如何循环表中的每个值并找到平均值

SQL:合并表中列的相似值并为其分配标识符

请根据要求写出相应的sql语句:查询score表中,语文成绩的最高分?

如何从多个SQL表中获取值并在html / php表中显示?

从 postgresql 数据库中选择值并根据我需要完整查询插入/更新