sql >> Databáze >  >> RDS >> Sqlserver

Vyberte uzel XML v SQL Server na základě maximální hodnoty podřízeného prvku

Co třeba tohle:

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

V podstatě vezmete „atomickou“ část, jako je „Uživatelské jméno“ přímo z XML, a poté křížově použijete seznam /user/token a extrahujete jednotlivé bity, které chcete – získáte výslednou sadu tří sloupců (UserName, ID, EndDate ) a můžete si je objednat a filtrovat.

Vedlejší poznámka:místo tohoto:

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

proč to nepoužít – je to mnohem jednodušší!

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



  1. Oracle:získat maximální hodnotu skupiny?

  2. Hodnoty Oracle ROWID

  3. Použití MS Access &ODBC pro připojení ke vzdálenému PostgreSQL

  4. Oracle – co se stane s transakcí v případě ztráty spojení ORA-03135?