【问题标题】:Need to find the Max value in a SQL table and Based on the MAX value need to generate the Id's需要在 SQL 表中找到 Max 值并根据 MA​​X 值生成 Id
【发布时间】: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 表代表 无序 集。您的结果似乎取决于排序,因此除非您有指定排序的列,否则无法解决此问题。

标签: sql sql-server sql-server-2016 window-functions gaps-and-islands


【解决方案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:好的,我想我误解了你的问题。我改变了答案。
猜你喜欢
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多