• Took me a minute... if you use Windowing functions (requires SQL 2012 or later), then this is easy. The PARTITION basically groups the records together... then you can use ROW_NUMBER() to number the members in each group, and then take the first one...

    /* create the table -- since I'm grouping by the Date, I split EventDate and EventTime into separate columns */

    CREATE TABLE #WeatherEvent (

    EventDate DATE

    ,EventTime TIME

    ,Reading DECIMAL(3,1)

    ,ReadingID INT IDENTITY(1,1)

    );

    GO

    /* insert some data... note the dates with multiple readings */

    INSERT INTO #WeatherEvent (EventDate, EventTime, Reading)

    VALUES ('11/19/2016', '10:10:26 PM',55),

    ('11/19/2016', '9:10:26 AM',65),

    ('11/20/2016', '1:21:26 AM', 54),

    ('11/20/2016', '4:45:22 PM', 72),

    ('11/21/2016', '1:02:27 AM', 49.9),

    ('11/22/2016', '08:00:26 AM', 50.3),

    ('11/22/2016', '4:45:32 PM', 90.3),

    ('11/23/2016', '10:25:26 AM', 43.8);

    Read up on ROW_NUMBER() and windowing functions... Itzik Ben Gan's book is great if youre ready for it.

    SELECT EventDate

    , EventTime AS DailyHighTime

    , Reading As DailyHigh

    FROM (

    SELECT EventDate

    , EventTime

    , Reading

    , ROW_NUMBER() OVER (PARTITION BY EventDate ORDER BY Reading DESC) As ReadingID

    FROM #WeatherEvent) we

    WHERE we.ReadingID=1;