sql >> Databasteknik >  >> RDS >> Sqlserver

Välj en XML-nod i SQL Server baserat på maxvärdet för ett underordnat element

Vad sägs om det här:

SELECT 
    TOP 1
    XMLCOL.value('(/user/name)[1]', 'nvarchar(20)') as 'UserName',
    Usr.Token.value('(id)[1]', 'nvarchar(20)') AS 'ID',
    Usr.Token.value('(endDate)[1]', 'DateTime') as 'EndDate'
FROM 
    dbo.MyTable
CROSS APPLY
    xmlcol.nodes('/user/token') AS Usr(Token)
ORDER BY
    Usr.Token.value('(endDate)[1]', 'DateTime') DESC

Du tar i princip den "atomiska" delen som "Användarnamn" direkt från XML, och sedan korsapplicerar du en lista med /användare/token och extraherar de individuella bitarna du vill ha - du får en resultatuppsättning med tre kolumner (Användarnamn, ID, Slutdatum ) och du kan beställa och filtrera dem.

Sidanteckning:istället för detta:

XMLCOL.query('user/name').value('.','NVARCHAR(20)') 

varför använder du inte det här - känns mycket lättare!

XMLCOL.value('(/user/name)[1]', 'NVARCHAR(20)') 



  1. SQL Server AlwaysOn Availability Groups:Installation och konfiguration, del 1

  2. Distribuerar Django Project på Webfaction

  3. Hur analyserar jag Json-data från openlibrary api? (ordentligt)

  4. Finns det ett .Net-gränssnitt till Oracle SQLPLUS?