Сумма других идентификаторов на основе даты в SQL Server CTE - PullRequest
0 голосов
/ 23 октября 2019

Мой образец CTE, полученный из нескольких источников и данных чертежей:

with sample_cte as 
(
    ae.spvr as col1,
    ae.startDate as start_dt,
    ae.END_DT as end_dt,
    round(ae.Scre, 2, 1) as Scre,
from 
    diff_sources ae

У меня есть CTE, который выдает мне вывод, подобный приведенному ниже:

col1 | start_dt | end_dt | score
-----+----------+--------+-------
a    | 10-01-19 |10-02-19| 50.50
a    | 10-02-19 |10-03-19| 55.50
b    | 10-01-19 |10-02-19| 60.50
b    | 10-02-19 |10-03-19| 65.50
c    | 10-01-19 |10-02-19| 70.50
c    | 10-02-19 |10-03-19| 75.50

Я ищудля добавления нового столбца, который получает сумму баллов на основе их дат (сумма баллов b и c для a, аналогично сумме a и b для c).

То, как это выглядит, выглядит примерно так

col1 | start_dt | end_dt | new_sum_score_column
-----+----------+--------+----------------------------------------------
a    | 10-01-19 |10-02-19| sum of b and c on these dates = (60.50+70.50)
a    | 10-02-19 |10-03-19| sum of b and c on these dates = (65.50+75.50)
b    | 10-01-19 |10-02-19| sum of a and c on these dates = (50.50+70.50)
b    | 10-02-19 |10-03-19| sum of a and c on these dates = (55.50+75.50)
c    | 10-01-19 |10-02-19| similar logic
c    | 10-02-19 |10-03-19| 

1 Ответ

2 голосов
/ 23 октября 2019

Предполагая, что ссылка на дату относится к первому столбцу, я думаю, что это работает:

select t.*,
       sum(score) over (partition by start_dt) - score
from t;

То есть. ,,рассчитать общую сумму и вычесть текущее значение.

РЕДАКТИРОВАТЬ:

Если есть несколько начальных дат, то:

select t.*,
       (sum(score) over (partition by start_dt) - 
        sum(score) over (partition by start_dt, col1)
       )
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...