Je travaille avec une table qui ressemble à ceci comme suit:
| | Name | UsrID | NumofCases | |---|:-----:|-------|:----------:| | 1 | Smith | 88885 | 6 |
3 Réponses :
C'est quelque chose qui peut aider:
SELECT TOP 50 Name, UsrID, COUNT(DISTINCT CaseID) as NumofCases, (select top 1 b.DL_NO FROM People b where a.UsrID = b.UsrID and ltrim(rtrim(b.DL_NO)) <> '' and b.DL_NO is not null order by b.DateSeen desc) as DL_NO, (select top 1 b.SSN FROM People b where a.UsrID = b.UsrID and ltrim(rtrim(b.SSN)) <> '' and b.SSN is not null order by b.DateSeen desc) as SSN, (select top 1 b.Address FROM People b where a.UsrID = b.UsrID and ltrim(rtrim(b.Address)) <> '' and b.Address is not null order by b.DateSeen desc) as Address, FROM People a WHERE DateSeen between '01/31/2019' and '10/02/2019' GROUP BY Name, UsrID
Vous pouvez essayer ci-dessous Query -
SELECT Name
,COUNT(DISTINCT CaseID) OVER(PARTITION BY Name)
,UsrID
,MAX(DL_NO) DL_NO
,MAX(SSN) SSN
,MAX(Address) Address
,MAX(DateSeen) DateSeen
FROM People
WHERE DateSeen BETWEEN 01/31/2019 AND 10/02/2019
GROUP BY Name, UsrID
ORDER BY DateSeen desc
Si vous contrôlez le modèle de données, la normalisation de vos tables rendrait le problème beaucoup plus simple. Il empêcherait également des incohérences de données comme l'incohérence de l'adresse de votre exemple de données alors votre requête est triviale p> et vous pouvez ajouter la date ou des filtres comptent. P> p>
Pouvez-vous clarifier que vous souhaitez la dernière valeur (par
daeseen code>) non-null pour chacun desdl_no code>,ssn code>,adresse/ code> et quedaeseen code> est toujours peuplé.SQL Server ou Sybase? Quelle version?