【发布时间】:2009-12-03 20:21:21
【问题描述】:
假设一个包含 TransactionId、ItemId、Code、EffectiveDate 和 CreateDate 字段的表。
+---------------+--------+------+------ -+------------------+ |交易ID |项目 ID |代码 |生效日期 |创建日期 | +---------------+--------+------+------ -+------------------+ | 1| 1| 8| 2009 年 12 月 2 日下午 1:13| 2009 年 12 月 2 日下午 1:13| +---------------+--------+------+------ -+------------------+ | 4| 1| 51|2009 年 12 月 2 日上午 11:08| 2009 年 12 月 3 日上午 9:01| +---------------+--------+------+------ -+------------------+ | 2| 1| 14|2009 年 12 月 2 日上午 11:09|2009 年 12 月 2 日上午 11:09| +---------------+--------+------+------ -+------------------+ | 3| 1| 61| 2009 年 12 月 3 日上午 8:33| 2009 年 12 月 3 日上午 8:33| +---------------+--------+------+------ -+------------------+ | 5| 1| 28| 2009 年 12 月 3 日上午 9:33| 2009 年 12 月 3 日上午 9:33| +---------------+--------+------+------ -+------------------+ | 6| 1| 9| 2009 年 12 月 3 日下午 1:58| 2009 年 12 月 3 日下午 1:58| +---------------+--------+------+------ -+------------------+我需要获取给定 ItemId 出现序列 51、61、9 的记录集,按 EffectiveDate 排序。这些记录之间可能有其他记录,其中包含其他代码。
在这种情况下,我将返回 TransactionId 的 4、3 和 6,如下所示。
+---------------+--------+------+------ -+------------------+ |交易ID |项目 ID |代码 |生效日期 |创建日期 | +---------------+--------+------+------ -+------------------+ | 4| 1| 51|2009 年 12 月 2 日上午 11:08| 2009 年 12 月 3 日上午 9:01| +---------------+--------+------+------ -+------------------+ | 3| 1| 61| 2009 年 12 月 3 日上午 8:33| 2009 年 12 月 3 日上午 8:33| +---------------+--------+------+------ -+------------------+ | 6| 1| 9| 2009 年 12 月 3 日下午 1:58| 2009 年 12 月 3 日下午 1:58| +---------------+--------+------+------ -+------------------+注意:
- 这不是我需要确定的唯一序列,但它说明了问题。
- 记录可以乱序插入到表中;也就是说,可以先插入 61 记录,然后是 51,然后是 9。您可以在示例中看到这一点,其中代码 51 记录的 CreateDate 晚于 EffectiveDate。
- 序列的顺序很重要。因此,序列 61、9、51 不会返回任何记录,但 51、61、9 会。
如果 DB 方法简单(即没有游标或过于复杂的存储过程),则它是理想的选择,但代码方法也可以工作,尽管它会导致大量数据从 DB 传输出来。
环境为 SQL Server 2005 和 C#/.NET 3.5。
【问题讨论】:
标签: c# sql sql-server sql-server-2005