SQL中的GroupBy和SelectMany类似物?

时间:2014-04-01 08:36:04

标签: sql tsql

在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运行子查询,即针对实体的历史数据,并为每个实体仅选择部分历史记录。

1 个答案:

答案 0 :(得分:1)

你可以使用CROSS APPLY这样做:

SELECT * 
FROM mytable
CROSS APPLY (
  SELECT * 
  FROM othertable
  WHERE instance_id = mytable.instance_id)

如果可能,我建议使用连接,但如果没有简单的连接条件,APPLY会派上用场。 This article很好地解释了。