我有以下带有示例数据的表定义。在下表中,“客户产品和日期”是关键字段
Table One Customer Product Date SALE X A 01/01/2010 YES X A 02/01/2010 YES X A 03/01/2010 NO X A 04/01/2010 NO X A 05/01/2010 YES X A 06/01/2010 NO X A 07/01/2010 NO X A 08/01/2010 NO X A 09/01/2010 YES X A 10/01/2010 YES X A 11/01/2010 NO X A 12/01/2010 YES
在上表中,我需要查找没有销售的N条或N条连续记录,销售值为’NO’例如,如果N为2,则结果集将返回以下内容
Customer Product Date SALE X A 03/01/2010 NO X A 04/01/2010 NO X A 06/01/2010 NO X A 07/01/2010 NO X A 08/01/2010 NO
有人可以帮助我进行SQL查询以获得所需的结果。我正在使用SQL Server2005。我开始使用ROW_NUMBER()ANDPARTITION子句进行游戏,但是没有运气。谢谢你的帮助
您需要将表与自身进行匹配,就好像在哪里有2个表。因此,您使用两个别名o1和o2来引用您的表:
SELECT DISTINCT o1.customer, o1.product, o1.datum, o1.sale FROM one o1, one o2 WHERE (o1.datum = o2.datum-1 OR o1.datum = o2.datum +1) AND o1.sale = 'NO' AND o2.sale = 'NO'; customer | product | datum | sale ----------+---------+------------+------ X | A | 2010-01-03 | NO X | A | 2010-01-04 | NO X | A | 2010-01-06 | NO X | A | 2010-01-07 | NO X | A | 2010-01-08 | NO
请注意,我是在postgresql数据库上执行查询的-也许语法在ms-sql-server上有所不同,也许在别名“ FROM one ASo1”上,也许您不能以这种方式添加/减去。