I have SQL Server table which has XML column that has data like below. Multiple records will be there in the table. Let us say table T1 and Column C1.
Our requirement is we need to get the latest data (by max of datereported, datecreated, dateupdated XML node for individual sections like AAA,BB,CC).
<XMLDoc>
<AAA>
<Name>Name_A</Name>
<Value>Val_A</Value>
<dateReported>1/1/2001</dateReported>
</AAA>
<AAA>
<Name>Name_B</Name>
<Value>Val_B</Value>
<dateReported>1/1/2014</dateReported>
</AAA>
<AAA>
<Name>Name_C</Name>
<Value>Val_C</Value>
<dateReported>1/1/2012</dateReported>
</AAA>
<AAA>
<Name>Name_D</Name>
<Value>Val_D</Value>
<dateReported>1/1/2011</dateReported>
</AAA>
<BB>
<ID>112</ID>
<dateCreated>1/1/2011</dateCreated>
</BB>
<BB>
<ID>121</ID>
<dateCreated>1/1/2012</dateCreated>
</BB>
<BB>
<ID>12</ID>
<dateCreated>1/1/2015</dateCreated>
</BB>
<CC>
<Type>XML</Type>
<dateUpdated>1/1/2015</dateCreated>
</CC>
<CC>
<Type>TXT</Type>
<dateUpdated>3/3/2015</dateUpdated>
</CC>
<CC>
<Type>XLS</Type>
<dateUpdated>2/2/2015</dateUpdated>
</CC>
</XMLDoc>
I have SQL written below
SELECT
ID,
Name = C1.value('(/XMLDoc/AAA/Name)[1]', 'varchar(100)'),
Value = C1.value('(/XMLDoc/AAA/Value)[1]', 'varchar(100)'),
BB_ID = C1.value('(/XMLDoc/BB/ID)[1]', 'int'),
CC_Type = C1.value('(/XMLDoc/CC/Type)[1]', 'varchar(50)')
From T1
We need output as
Id Name, Value, BB_ID, CC_Type
1 Name_B Val_B 12 TXT
Need your inputs