嘿,这是我的第一个堆栈溢出问题,所以如果我没有以最好的方式提问,请让我知道,我可以添加更多信息.
上下文:
我有一个包含四列的SQL表,名为:
Acc_ID、BLOCK_CATEGORY、开始日期、值
这些列包括: (编号)、(编号)、(日期)、(编号)
该表将对帐户所做的所有更改记录为一个新行,而ACC_ID是与该帐户关联的唯一列.START_DATE是更改的日期.为此,我们可以忽略值列.
我需要运行一个查询来了解所有帐户何时更改为它们所在的当前BLOCK_CATEGORY.我面临的问题是,块类别是数字1-8,它们以前可能在同一个BLOCK_CATEGORY上,但我们需要知道这一次它是什么时候改为它的?
以下是一些帮助您理解的样本数据(对于我的样本,日期格式为DD/MM/YYYY):
ACC_ID | BLOCK_CATEGORY | START_DATE | Value |
---|---|---|---|
1001 | 7 | 14/08/2022 | 5 |
1001 | 2 | 16/08/2022 | 5 |
1001 | 7 | 17/08/2022 | 10 |
1001 | 7 | 19/08/2022 | 10 |
1002 | 4 | 14/08/2022 | 3 |
1002 | 3 | 15/08/2022 | 3 |
1002 | 3 | 17/08/2022 | 9 |
1003 | 1 | 14/08/2022 | 10 |
1003 | 1 | 17/08/2022 | 13 |
1004 | 3 | 14/08/2022 | 2 |
1005 | 7 | 14/08/2022 | 11 |
1005 | 2 | 16/08/2022 | 34 |
1005 | 3 | 19/08/2022 | 1 |
1005 | 7 | 21/08/2022 | 12 |
这样做的最终结果是:
ACC_ID | BLOCK_CATEGORY | START_DATE |
---|---|---|
1001 | 7 | 17/08/2022 |
1002 | 3 | 15/08/2022 |
1003 | 1 | 14/08/2022 |
1004 | 3 | 14/08/2022 |
1005 | 7 | 21/08/2022 |
我希望通过上面的例子和问题让你明白这一点.如果有任何问题,请提出来.
我正在使用的当前查询显示以下不正确的结果:
ACC_ID | BLOCK_CATEGORY | START_DATE |
---|---|---|
1001 | 7 | 14/08/2022 |
1002 | 3 | 15/08/2022 |
1003 | 1 | 14/08/2022 |
1004 | 3 | 14/08/2022 |
1005 | 7 | 14/08/2022 |
以下是我正在使用的查询.我们如何才能运行查询来给出正确的期望结果,即它何时更改为当前的BLOCK_CATEGORY.
SELECT *
FROM (
SELECT ACC_ID,
BLOCK_CATEGORY,
START_DATE,
ROW_NUMBER() OVER (PARTITION BY acc_id order by start_date DESC) RowNum
FROM
(
SELECT ACC_ID,
BLOCK_CATEGORY,
MIN(START_DATE) 'START_DATE'
FROM [dbo].[ACCOUNTCHANGES]
WHERE
BLOCK_CATEGORY IS NOT NULL
GROUP BY ACC_ID,BLOCK_CATEGORY
) A
) B
WHERE B.RowNum = 1