I'm trying to figure how to retrieve minimum/maximum values and minimum/maximum dates from a data set, but also the date value that corresponds to each minimum/maximum value.
Example Data:
CREATE TABLE mytable ([ID] int, [TEMP] FLOAT, [DATE] DATE);INSERT INTO mytable ([ID], [TEMP], [DATE])VALUES (8305, 16.38320208, '03/22/2002'), (8305, 17.78320208, '11/15/2010'), (8305, 16.06320208, '03/11/2002'), (8305, 18.06320208, '02/01/2007'), (2034, 5.2, '03/12/1985'), (2034, 2.24, '05/31/1991'), (2034, 6.91, '09/15/1981'), (2034, 7.98, '07/16/1980'), (2034, 10.03, '03/21/1979'), (2034, 6.85, '11/19/1982');
I'm struggling use Common Table Expressions to obtain both Min values & associated date, Max values and associated date, AND the actual min/max dates from the whole dataset in the same query
;WITH cte AS( SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY [TEMP] DESC) AS rn FROM mytable)SELECT cte.ID, COUNT(*) AS COUNT, cte.TEMP AS MAXTEMP, cte.DATE AS MAXTEMPDATE, MAX(mt.DATE) AS MAXDATEFROM cte INNER JOIN mytable mt ON cte.ID = mt.IDWHERE rn = 1GROUP BY cte.ID, cte.TEMP, cte.DATE;
Edit 1: Expected output per user
| ID | COUNT | MAXTEMP | MAXTEMPDATE | MAXDATE | MINTEMP | MINTEMPDATE | MINDATE||------|-------|-------------|-------------|---------------|---------------|-------------|-----------|| 2034 | 6 | 10.03 | 1979-03-21 | 1991-05-31 | 2.24 | 1991-05-31 |1979-03-21 || 8305 | 4 | 18.06320208 | 2007-02-01 | 2010-11-15 | 16.06320208 | 2002-03-11 |2002-03-11 |