Quantcast
Viewing all articles
Browse latest Browse all 207

How to retrieve min/max values and corresponding dates in a table

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 |

Viewing all articles
Browse latest Browse all 207

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>