J'ai quelques enregistrements dans ma table tbl1
. Il y a une colonne s
, basée sur laquelle j'ai besoin de récupérer les lignes où datateime1
est une ancienne date.SQL: sélection de plusieurs lignes par groupe
Si j'essaie la requête ci-dessous, il me semble que les résultats sont corrects. Maintenant, j'essaie d'obtenir le deux les plus anciennes lignes du groupe s1
. J'ai essayé en ajoutant deux fois 's1'
à la clause IN, mais cela ne fonctionne pas, car les lignes sont sélectionnées par leur ROWNUMBER.
Alors, comment puis-je réécrire la requête pour sélectionner un nombre flexible de lignes par groupe (en commençant par les deux dates les plus anciennes)?
Requête:
SELECT
tbl2.*
FROM
(
SELECT
a, b, c,
ROW_NUMBER() OVER (PARTITION BY tbl1.s ORDER BY tbl1.Datetime1)) AS RowNo
FROM
tbl1
WHERE
tbl1.s in ('s1','s2','s2','s3','s1','s4')
) AS tbl2
WHERE
tbl2.rowno = 1
tbl1 ressemble:
a b c s Datetime1
-------------------------------------------------
samp1a samp1b samp1c s1 1/1/2000
samp1a samp1b samp1c s1 2/1/2000
samp1a samp1b samp1c s1 3/1/2000
samp2a samp2b samp2c s2 2/1/2002
samp2a samp2b samp2c s2 3/1/2002
samp3a samp3b samp3c s3 3/1/2000
La sortie désirée est:
a b c s p
-------------------------------------------------
samp1a samp1b samp1c s1 1/1/2000
samp1a samp1b samp1c s1 2/1/2000
samp2a samp2b samp2c s2 2/1/2002
samp3a samp3b samp3c s3 3/1/2000
Mec, sérieusement. Si nous sommes supposés vous donner des conseils gratuits, pourriez-vous être plus clair, utiliser des paragraphes, éviter les phrases à répétition, et éviter les néologismes comme "bcz"? C'est trop comme du travail pour essayer de comprendre ce que vous voulez dire. – tpdi
@vignesh: J'ai essayé de réécrire complètement votre question, pour autant que je puisse la comprendre. Veuillez passer en revue mes changements et vérifier si cela correspond toujours à votre intention. Vous pouvez apporter d'autres modifications en cliquant sur "modifier". – Tomalak