salve Tommaso,
non so se ho ben compreso le tue esigenze... non hai neanche indicato che tipologia di RDBMS utilizzi, e personalmente, di seguito, mi basero' su SQL Server...
la mia comprensione e' che, avendo un insieme di righe, con date e orario diversi tra loro, tu richieda, per ogni giorno, eventualmente filtrato, ottenere la riga con orario maggiore...
se questo e' corretto, puoi effettuare una selezione di MAX(..) con raggruppamento per la parte "giorno" di ogni riga... vari modi per fare cio'... dal semplicissimo CONVERT(date, ...) a funzioni di estrazione DATEPART(...)... di seguito ho usato CONVERT, ma non ho verificato in effetti le implicazioni prestazionali, che ti consiglio comunque di verificare...
ottenuto questo risultato intermedio, avendo quindi, per ogni giorno, il riferimento all'orario maggiore, possiamo mettere in join la tabella originaria con il risultato intermedio (tramite una Common Table Expression), ottenendo quindi la proiezione richiesta...
di seguito, trivialmente,
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
Id int IDENTITY,
dt datetime NOT NULL
);
GO
INSERT INTO dbo.t (dt)
VALUES ('2018-01-01 15:30:40'), ('2018-01-01 21:30:40'),
('2018-01-02 20:30:40'), ('2018-01-02 22:30:40'),
('2018-01-03 05:30:40'), ('2018-01-03 08:30:40');
GO
PRINT 'SELEZIONE, per ogni data, della Riga con Orario Maggiore';
SELECT CONVERT(date, t.dt) [DateRef], MAX(t.dt)
FROM dbo.t t
GROUP BY CONVERT(date, t.dt);
PRINT 'Combinando la SELEZIONE precedente con la tabella base, possiamo estrarre le righe referenziate da ogni singolo orario';
WITH cte AS (
SELECT CONVERT(date, t.dt) [Date], MAX(t.dt) AS [DateReferral]
FROM dbo.t t
GROUP BY CONVERT(date, t.dt)
)
SELECT t.*
FROM dbo.t t
JOIN cte c ON c.[DateReferral] = t.[dt]
ORDER by c.[Date];
GO
DROP TABLE dbo.t;
--<---------
SELEZIONE, per ogni data, della Riga con Orario Maggiore
DateRef
---------- -----------------------
2018-01-01 2018-01-01 21:30:40.000
2018-01-02 2018-01-02 22:30:40.000
2018-01-03 2018-01-03 08:30:40.000
Combinando la SELEZIONE precedente con la tabella base, possiamo estrarre le righe referenziate da ogni singolo orario
Id dt
----------- -----------------------
2 2018-01-01 21:30:40.000
4 2018-01-02 22:30:40.000
6 2018-01-03 08:30:40.000
salutoni