我有一个具有以下结构的XML文件:
<row>
<id><timestamp>
<some other fields>
</row>
<row>
<id><timestamp>
<some other fields>
</row>
有几行具有相同的id
但时间戳不同。
我想编写一个查询,将XML内容提取到SQL行集中,以便对于每个id
,我将获得具有最新时间戳的行。
到目前为止,由于这个SO问题,我已经使用以下内容提取了行:
SELECT T2.Row.query('.')
FROM #xml_tmp_table
CROSS APPLY XML_TABLE.nodes('/xml_ROOT/section_of_interest') as T2(Row)
现在,根据SQL文档,从XML行中读取单个数据列可以使用value()方法。
因此,我想要做这样的事情:
SELECT
T2.Row.query('.').value("id_field", "int"),
max( T2.Row.query('.').value("timestamp_field", "datetime")),
T2.Row.query('.').value("data_field_1", "decimal(5,2)")),
T2.Row.query('.').value("data_field_2", "int")),
...
T2.Row.query('.').value("yet_another_data_field", "its_type"))
FROM #xml_tmp_table --or T2 maybe?
group by id_field
我希望只获取每个id
值的最新时间戳对应的行。
有什么提示可以帮助正确实现这个功能吗?
我猜需要将第一个查询的结果保存到一个临时表中,并在其行上应用value()
函数。
WITH cte AS (SELECT * FROM @xml) SELECT * FROM cte GROUP BY ...
- Lukasz Szozda