gpt4 book ai didi

sql - 在交叉应用中获取最大 row_number

转载 作者:行者123 更新时间:2023-12-04 20:54:37 27 4
gpt4 key购买 nike

在我的 sql 案例中,我在计算 row_number 的最大值时遇到了麻烦。

我将直接在 SQL Fiddle 示例上进行解释,因为我认为理解起来会更快:SQL Fiddle

  • “OrderNumber”、“HourMinute”和“Code”列仅代表我的表格,因此不应与编码目的相关
  • “DateOnly”列包含日期
  • “电话”列包含我客户的电话
  • “购买”列包含客户在过去 12 个月内购买的次数。请注意,此值是为每个日期提供的,因此 12 个月的时间段与我们正在评估的日期相关。

  • 最后,我试图生成的列是“PREVIOUSPURCHASES”,它计算“Purchases”列中提供的数字在过去 12 个月(针对每部手机)出现的次数。

    您可以在 SQL Fiddle 示例中看到我到目前为止所取得的成就。 'PREVIOUSPURCHASES' 列产生了我想要的东西,但是,它也产生了较低的值(例如,只有最大值是我需要的值)。

    例如,您可以看到第 4 行和第 5 行是重复的,其中一个的“PREVIOUSPURCHASES”为 1,另一个为 2。在这种情况下,我不想要第 4 行。

    我曾想过用 max(row_number) 之类的东西替换 row_number 但我一直无法生成它(已经在 stackoverflow 上看过类似的帖子...)。

    这应该在 SQL Server 2012 中实现。

    提前致谢。

    最佳答案

    我不确定您想看到什么样的结果集,但是返回的结果有什么问题吗?

    SELECT c.OrderNumber, c.DateOnly, c.HourMinute, c.Code, c.Phone, c.Purchases, MAX(o.PreviousPurchases)
    FROM cte c CROSS APPLY (
    SELECT t2.DateOnly, t2.Phone,t2.ordernumber, t2.Purchases, ROW_NUMBER() OVER(PARTITION BY c.DateOnly ORDER BY t2.DateOnly) AS PreviousPurchases
    FROM CurrentCustomers_v2 t2
    WHERE c.Phone = t2.Phone AND t2.purchases<=c.purchases AND DATEDIFF(DAY, t2.DateOnly, c.DateOnly) BETWEEN 0 AND 365
    ) o
    WHERE c.OrderNumber = o.OrderNumber
    GROUP BY c.OrderNumber, c.DateOnly, c.HourMinute, c.Code, c.Phone, c.Purchases
    ORDER BY c.DateOnly

    关于sql - 在交叉应用中获取最大 row_number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932284/

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