Sql server 在SQL Server中查找嵌套数据?

Sql server 在SQL Server中查找嵌套数据?,sql-server,Sql Server,我有一张促销表,但有些促销的持续时间不同 +---------+-------------+---------+----------+------------+-----+ | year_id | week_number | good_id | store_id | promo_name | qty | +---------+-------------+---------+----------+------------+-----+ | 2019 | 41 | 22197

我有一张促销表,但有些促销的持续时间不同

+---------+-------------+---------+----------+------------+-----+
| year_id | week_number | good_id | store_id | promo_name | qty |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 41          | 22197   | 64       | October    | 10  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 42          | 22197   | 64       | October    | 2   |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 43          | 22197   | 64       | October    | 54  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 44          | 22197   | 64       | October    | 3   |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 41          | 22197   | 64       | Flash      | 13  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 42          | 22197   | 64       | Flash      | 56  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 42          | 22197   | 64       | New        | 41  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 43          | 22197   | 64       | New        | 4   |
+---------+-------------+---------+----------+------------+-----+
我想为每一对好商店找出所有这样的情况,即短促销变成长促销并更改名称,例如:

+---------+-------------+---------+----------+------------+-----+
| year_id | week_number | good_id | store_id | promo_name | qty |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 41          | 22197   | 64       | October    | 10  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 42          | 22197   | 64       | October    | 2   |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 43          | 22197   | 64       | October    | 54  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 44          | 22197   | 64       | October    | 3   |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 41          | 22197   | 64       | October    | 13  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 42          | 22197   | 64       | October    | 56  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 42          | 22197   | 64       | October    | 41  |
+---------+-------------+---------+----------+------------+-----+
| 2019    | 43          | 22197   | 64       | October    | 4   |
+---------+-------------+---------+----------+------------+-----+

对于相同商品标识和商店标识,按年份和周排序时促销名称的第一个值

然后窗口函数将是我的选择

SELECT year_id, week_number, good_id, store_id, 
 FIRST_VALUE(promo_name) OVER (PARTITION BY good_id, store_id ORDER BY year_id, week_number) AS promo_name,
qty
FROM PromoSales ps
ORDER BY 1, 2, 3, 4
在更新中使用它

WITH CTE AS
(
    SELECT 
     promo_name, 
     FIRST_VALUE(promo_name) OVER (PARTITION BY good_id, store_id ORDER BY year_id, week_number) AS original_promo_name
    FROM PromoSales
)
UPDATE CTE
SET promo_name = original_promo_name
WHERE promo_name != original_promo_name
  AND original_promo_name IS NOT NULL;

这是一个怎样的“嵌套数据”的例子?什么是“较短的促销品进入较长的促销品”的意思?在这种情况下,“进入”到底意味着什么?你真的需要解释你的逻辑是什么,并向我们展示你的尝试。请记住,您正在与不了解您使用的系统或您的数据含义的人交谈。这意味着促销日期(年和周)包含在较长促销日期中,但不能超过这些日期,也不能完全一致,因此不是代码编写服务,你需要试一试,展示你的尝试,然后有人会帮助你。