基于列值的记录的SQL查询

时间:2015-07-22 22:41:51

标签: sql teradata

我有两个表加入,我希望在过去60天内查询超过3/3 pmt_cde的记录

TABLE1:
 ID_CHAIN
 PMT_CDE
 PMT_DATE
 PMT_AMOUNT

TABLE2:
 ID_CHAIN

我正在寻找过去60天内有超过3个PMT_CDE = 536的ID_CHAIN。

P.S。这是一个新问题,我今天早些时候有过类似案例,但相信我这是全新的。感谢。

1 个答案:

答案 0 :(得分:1)

由于您尚未指定哪个RDBMS - 这是Oracle答案(但将日期算法转换为任何其他RDBMS应该相对简单):

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE TABLE1 (
  ID_CHAIN    NUMBER,
  PMT_CDE     NUMBER,
  PMT_DATE    DATE,
  PMT_AMOUNT  NUMBER
);

INSERT INTO TABLE1 VALUES ( 1, 536, DATE '2015-07-23', 0 );
INSERT INTO TABLE1 VALUES ( 1, 536, DATE '2015-07-22', 0 );
INSERT INTO TABLE1 VALUES ( 1, 536, DATE '2015-07-21', 0 );
INSERT INTO TABLE1 VALUES ( 1, 536, DATE '2015-07-20', 0 );
INSERT INTO TABLE1 VALUES ( 2, 536, DATE '2015-07-22', 0 );
INSERT INTO TABLE1 VALUES ( 2, 536, DATE '2015-07-21', 0 );
INSERT INTO TABLE1 VALUES ( 2, 536, DATE '2015-05-01', 0 );
INSERT INTO TABLE1 VALUES ( 3, 536, DATE '2015-07-22', 0 );
INSERT INTO TABLE1 VALUES ( 3, 536, DATE '2015-07-21', 0 );
INSERT INTO TABLE1 VALUES ( 4, 536, DATE '2015-02-03', 0 );
INSERT INTO TABLE1 VALUES ( 4, 536, DATE '2015-02-02', 0 );
INSERT INTO TABLE1 VALUES ( 4, 536, DATE '2015-02-01', 0 );

查询1

SELECT ID_CHAIN
FROM   TABLE1
WHERE  PMT_DATE >= CURRENT_DATE - INTERVAL '60' DAY
AND    PMT_CDE  = 536
GROUP BY ID_CHAIN
HAVING COUNT(ID_CHAIN) > 3

<强> Results

| ID_CHAIN |
|----------|
|        1 |