Il s'agit d'une simplification à outrance, mais.. :
J'ai un tableau qui ressemble à ce qui suit :
CREATE TABLE Table1
([ID] int, [USER] varchar(5), [DATE] date)
;
INSERT INTO Table1
([ID], [USER], [DATE])
VALUES
(1, 'A', '2018-10-01'),
(2, 'A', '2018-09-01'),
(3, 'A', NULL),
(4, 'B', '2018-05-03'),
(5, 'B', '2017-04-01'),
(6, 'C', NULL)
;
Et pour chaque utilisateur, je souhaite récupérer toute la ligne de détails dans laquelle se trouve le DATE
est minime.
SELECT T.USER FROM TABLE1 T
WHERE T.DATE = (SELECT MIN(DATE) FROM TABLE1 T1 WHERE T1.USER = T.USER)
Le système fonctionne parfaitement, mais dans l'instance, aucune ligne n'est remplie. DATE
il y aura une ligne avec un NULL
comme la dernière ligne de mon tableau ci-dessus, que je souhaite également sélectionner.
Dans ce cas, mon résultat idéal est donc le suivant :
(2, 'A', '2018-09-01'),
(5, 'B', '2017-04-01'),
(6, 'C', NULL)
SQL fiddle : http://www.sqlfiddle.com/#!9/df42b5/6
Je pense qu'il est possible de faire quelque chose en utilisant une instruction EXCLUDE, mais cela devient rapidement complexe.