0

我试图从一张桌子上找到。一列不匹配的所有记录。我还需要根据不匹配的条目来遵循某些情况的日期。

例子:

record     COL1|COL2|COL3|  COL4  |  COL 5
1)          A    B    X    1/20/13   1/20/13
2)          A    B    Y    1/15/13   1/16/13
3)          B    D    X    2/14/13   2/16/13
4)          B    D    Y    2/15/13   4/09/13

我需要的是(以记录 1 和 2 为例):

  • COL1 = COL1 和 COL2 = COL2

  • COL3 <> COL3(在 COL3 中仅存在条目 X 或 Y。

  • 记录 2 上的 COL4 >= 记录 1 上的 COL5

换句话说; 我需要 COL1 和 COL2 重复但 COL3 是唯一的所有记录;而且 Y 的记录必须有 COL4 >= X 的记录 COL5 -7days

4

1 回答 1

0

SQL小提琴

MS SQL Server 2008 架构设置

CREATE TABLE Table1
    ([record] int, [COL1] varchar(1), [COL2] varchar(1), [COL3] varchar(1), [COL4] date, [COL5] date)
;

INSERT INTO Table1
    ([record], [COL1], [COL2], [COL3], [COL4], [COL5])
VALUES
    (1, 'A', 'B', 'X', '2013-01-20', '2013-01-20'),
    (2, 'A', 'B', 'Y', '2013-01-15', '2013-01-16'),
    (3, 'B', 'D', 'X', '2013-02-14', '2013-02-16'),
    (4, 'B', 'D', 'Y', '2013-02-15', '2013-04-09'),
    (5, 'C', 'E', 'X', '2013-02-14', '2013-02-16'),
    (6, 'C', 'E', 'Y', '2013-01-15', '2013-02-09')
;

查询 1

SELECT t1.*
FROM Table1 t1
INNER JOIN Table1 t2 ON t1.col1 = t2.col1 AND
                        t1.col2 = t2.col2 AND  
                        t1.col3 <> t2.col3 AND
                        t2.col4 >= dateadd(dd,-7,t1.col5)
WHERE t1.col3 = 'X'
UNION
SELECT t2.*
FROM Table1 t1
INNER JOIN Table1 t2 ON t1.col1 = t2.col1 AND
                        t1.col2 = t2.col2 AND  
                        t1.col3 <> t2.col3 AND
                        t2.col4 >= dateadd(dd,-7,t1.col5)
WHERE t1.col3 = 'X'

结果

| RECORD | COL1 | COL2 | COL3 |       COL4 |       COL5 |
|--------|------|------|------|------------|------------|
|      1 |    A |    B |    X | 2013-01-20 | 2013-01-20 |
|      2 |    A |    B |    Y | 2013-01-15 | 2013-01-16 |
|      3 |    B |    D |    X | 2013-02-14 | 2013-02-16 |
|      4 |    B |    D |    Y | 2013-02-15 | 2013-04-09 |
于 2013-10-04T19:43:04.870 回答