learning_new Ответов: 2

Использование суммы с несколькими датами, но сохранение только последней даты


У меня стол называется Перспектива это выглядит примерно так, и я пытаюсь суммировать значение так, чтобы у меня было только 1 GOERGIA, ALABAMA и TEXAS, а дата, хранящаяся в поле date, была последней датой.
Date             Sight        Blck   Knock  Purchased   Rate
2020-02-13       GEORGIA      11     6      54.55       0.0385
2020-02-13       GEORGIA      1      1      100         0.0035
2020-02-14       GEORGIA      2      0      0           0.007
2020-02-12       ALABAMA      2      0      0           0.007
2020-02-15       ALABAMA      2      0      0           0.007
2020-02-16       ALABAMA      2      1      50          0.007
2020-02-16       TEXAS        2      0      0           0.007
2020-02-16       TEXAS        2      0      0           0.007
2020-02-17       TEXAS        1      0      0           0.005

Я хотел бы иметь стол, который выглядит следующим образом
Date         Sight    Blck   Knock   Purchased   Rate
2020-02-14   GEORGIA  14     7       154.55      0.049
2020-02-16   ALABAMA  6      1       50          0.021
2020-02-17   TEXAS    5      0       0           0.019


Что я уже пробовал:

SELECT cast (Date as date)
      ,Sight
      ,SUM (CAST (Blck AS INT))
      ,SUM (CAST(Knock AS INT))
	  ,SUM (CAST(Purchased AS money))
      ,SUM( CAST (Rate AS money))

  FROM Prospect
  GROUP BY cast( Date as Date)
          ,[Blck ]
          ,[Knock ]
          ,[Purchased ]
          ,[Rate ]

2 Ответов

Рейтинг:
17

MadMyche

На самом деле вам понадобится 3 запроса:
Запрос 1 собирается агрегировать суммы для каждого штата.
Запрос 2 собирается получить состояние и последнюю дату
Запрос 3 присоединится к вышеприведенным запросам.

Вот структура таблицы и некоторые из ваших данных в ней.

DECLARE @Data TABLE (
   dDate     DATE,
   dSite     VARCHAR(32),
   Blck      INT,
   Knock     INT,
   Purchased DECIMAL(5,2),
   Rate      DECIMAL(5,4)
)
INSERT @data VALUES
  ('2020-02-13', 'GEORGIA', 11, 6, 54.55, 0.0385)
, ('2020-02-13', 'GEORGIA',  1, 1,   100, 0.0035)
, ('2020-02-14', 'GEORGIA',  2, 0,     0, 0.007)
, ('2020-02-12', 'ALABAMA',  2, 0,     0, 0.007)
, ('2020-02-15', 'ALABAMA',  2, 0,     0, 0.007)
, ('2020-02-16', 'ALABAMA',  2, 1,    50, 0.007)
Теперь перейдем к первому запросу; получение суммы для каждого сайта
SELECT dSite
     , sumBlock = SUM(Blck)
     , sumKnock = SUM(Knock)
     , sumPurch = SUM(Purchased)
     , sumRate  = SUM(Rate)
FROM @Data
GROUP BY dSite
И второй запрос на сайты и последнюю дату
SELECT dSite
     , maxDate = Max(dDate)
FROM @Data
GROUP BY dSite
И для последнего вопроса... мы собираемся объединить их, используя их в качестве подзапросов
SELECT b.maxDate, a.*
FROM (
   SELECT dSite
        , sumBlock  = SUM(Blck)
        , sumKnock  = SUM(Knock)
        , sumPurch  = SUM(Purchased)
        , sumRate   = SUM(Rate)
   FROM  @Data
   GROUP BY   dSite               ) AS a

INNER JOIN (
   SELECT dSite
        , maxDate   = Max(dDate)
   FROM  @Data
   GROUP BY   dSite               ) AS b ON a.dSite = b.dSite

ORDER BY b.maxDate, a.dSite


Richard Deeming

- Нет, не знаешь. :)

Рейтинг:
11

Richard Deeming

Вам нужен только один запрос, но вы должны использовать MAX в столбце дата, и только GROUP BY государство:

SELECT
    MAX([Date]) As [Date],
    Sight,
    SUM(Blck) As Blck,
    SUM(Knock) As Knock,
    SUM(Purchased) As Purchased,
    SUM(Rate) As Rate
FROM
    Prospect
GROUP BY
    Sight
ORDER BY
    [Date],
    Sight
;


Maciej Los

5ed!