我有一个包含大约7列的表,其中包含一个包含XML的字段。每个唯一一组customer_id,product_id和max的需要字段table_id
有多个客户ID,每个客户ID可能有多个产品ID。
对于客户ID和产品ID的每个唯一组合,都有多个表ID(称为edw_policy_data_id)。
我需要获取与客户ID和产品实例ID的每个唯一组合对应的max edw_policy_data_id的XML。
最后,我需要限制日期范围内的内部查询。
我目前的查询看起来像这样;我现在返回的列数多于我现在需要的数量,并排序它们以调试查询。我还没能用max()做任何有意义的事情。
select edw_policy_data_id, e.customer_id, e.product_instance_id, policy_data_xml
FROM [DB].[dbo].[EDW_POLICY_DATA] e
inner join (SELECT distinct customer_id, product_instance_id
FROM [DB].[dbo].[EDW_POLICY_DATA]
where created_date > '12/1/2011'
and created_date < '12/27/2011 17:16:00') d
on e.customer_id = d.customer_id and e.product_instance_id = d.product_instance_id
order by customer_id, product_instance_id, edw_policy_data_id
结果是这个样子:
edw_policy_data_id e.customer_id e.product_instance_id policy_data_xml
1 100 200 xml
2 100 200 xml
3 100 201 xml
4 101 203 xml
5 101 203 xml
我需要的结果看起来是这样的调试 - 注意,只为每个唯一CUSTOMER_ID/product_instance_id组合最大edw_policy_data_id存在。
edw_policy_data_id e.customer_id e.product_instance_id policy_data_xml
2 100 200 xml
3 100 201 xml
5 101 203 xml
最后,我要的是每个MAX(edw_policy_id)的XML/CUSTOMER_ID/product_instance_ID组合。
我看着this question的回应:没有快乐。
使用窗口功能,如我的回答看出,没有理由加入或团体或MAX(),然后 – cairnz 2011-12-28 15:04:26
但是,如果你想要做的是,短期的版本是选择tbl.a,tbl.b,tbl.c from tbl inner join(select a,b,max(c)as c from tbl where ...)as tbl2 on tbl.a = tbl2.a and tbl.b = tbl2 .b和tbl.c = tbl2.c - 使用此命令,可以获得c(edw_policy_data_id)最大值的表的col abc的完整内容。 – cairnz 2011-12-28 21:40:14