У меня есть такая таблица:

Title   | Version   | Condition | Count
-----------------------------------------------
Title1  | 1.0       | 1         | 10
Title1  | 1.1       | 2         | 5
Title1  | 1.1       | 2         | 10
Title1  | 1.1       | 1         | 10
Title2  | 1.0       | 2         | 10
Title2  | 1.5       | 1         | 5
Title2  | 1.5       | 2         | 5
Title3  | 1.5       | 2         | 10
Title3  | 1.5       | 1         | 10

И я хотел бы суммировать значение «Count» для каждой строки, которая имеет MAX () «Version» и «Condition» = 2. Я бы хотел, чтобы это был результирующий набор данных:

Title   | Version   | Condition | Count
-----------------------------------------------
Title1  | 1.1       | 2         | 15
Title2  | 1.5       | 2         | 5
Title3  | 1.5       | 2         | 10

Я могу получить список «Заголовок» И МАКС. («Версия») с «Условием» = 2 с:

SELECT DISTINCT Title, MAX(Version) AS MaxVer FROM TABLE
WHERE Condition = 2
GROUP BY Title

Бит, я не уверен, как добавить все "счетчики".

2
wakeful 9 Май 2016 в 23:01

2 ответа

Лучший ответ

Попробуй это:

SELECT t1.Title, t1.Version, t1.Condition, SUM([Count]) AS Count
FROM mytable AS t1
JOIN (
  SELECT Title, MAX(Version) AS max_version
  FROM mytable
  WHERE Condition = 2
  GROUP BY Title
) AS t2 ON t1.Title = t2.Title AND t1.Version = t2.max_version
WHERE t1.Condition = 2
GROUP BY t1.Title, t1.Version, t1.Condition

Демо здесь

2
Giorgos Betsos 9 Май 2016 в 21:18

Для этого нужен только один доступ к таблице:

SELECT Title, Version, Condition, Count
FROM
 ( -- calculate all SUMs
   SELECT Title, Version, Condition, SUM(Count) AS Count,
      ROW_NUMBER() OVER (PARTITION BY Title ORDER BY Version DESC) AS rn
   FROM TABLE
   WHERE Condition = 2
   GROUP BY Title, Version, Condition
 ) AS dt
   -- and return only the row with the highest Version
WHERE rn = 1
1
dnoeth 9 Май 2016 в 20:36