在C#中,我可以对集合项进行分组,为每个组运行子查询,然后返回行。
var rows = collection.GroupBy( item => item.Property).SelectMany( g => ...);
在SelectMany
部分中,查询可以针对集合(由于关闭)或/和分组项运行。然后组合子查询的结果。
我的问题是我不知道如何用SQL查询实现相同的功能。
放置在select中的子查询可以进行参数化,但允许最多返回一行,并且连接不排除不属于该组的项目。
我没有面向sql的心态,如果真的是一个愚蠢的问题就道歉。
时态DB的例子:
id instance_id data from to
1 1 A 20140301 20140310
2 1 AA 20140311 20140321
3 2 B 20140301 20140305
4 2 BC 20140306 20140316
我需要为每个instance_id运行子查询,即针对实体的历史数据,并为每个实体仅选择部分历史记录。
答案 0 :(得分:1)
你可以使用CROSS APPLY这样做:
SELECT *
FROM mytable
CROSS APPLY (
SELECT *
FROM othertable
WHERE instance_id = mytable.instance_id)
如果可能,我建议使用连接,但如果没有简单的连接条件,APPLY会派上用场。 This article很好地解释了。