SQL DB2:在列值更改之前需要最新记录
需要选择属于在列ANDRI(value=p)中具有唯一值的客户机的所有最近记录,直到列ANDRI中的值发生变化(value=Q)。记录需要根据表B中的客户机名称ID(唯一ID)进行分组。两个表可以通过列ID(主键)连接 下面是我的DB2表A:SQL DB2:在列值更改之前需要最新记录,sql,db2,Sql,Db2,需要选择属于在列ANDRI(value=p)中具有唯一值的客户机的所有最近记录,直到列ANDRI中的值发生变化(value=Q)。记录需要根据表B中的客户机名称ID(唯一ID)进行分组。两个表可以通过列ID(主键)连接 下面是我的DB2表A: +---------+---------------+------+-----+---------+-------+ | ID | Client Type | ANDRI| Date (Timestamp) | +---------
+---------+---------------+------+-----+---------+-------+
| ID | Client Type | ANDRI| Date (Timestamp) |
+---------+---------------+------+-----+---------+-------+
| 878 | Personal | P | 2020-09-22 16:47:08 |
| 576 | Personal | P | 2020-09-22 10:47:08 |
| 745 | Personal | P | 2019-05-21 14:47:08 |
| 142 | Business | Q | 2019-09-20 16:11:08 |
| 711 | Personal | Q | 2018-02-12 15:27:08 |
| 441 | Personal | P | 2018-01-29 10:57:08 |
| 371 | Personal | P | 2017-05-20 11:17:08 |
| 115 | Personal | P | 2016-10-12 14:47:08 |
+---------+---------------+------+-----+---------+-------+
这是我的DB2表B:
+---------+---------------+------+-----+---------+-------+
| ID | Client Name ID| ODER| Date (Timestamp) |
+---------+---------------+------+-----+---------+-------+
| 878 | Alice | A | 2020-09-22 16:47:08 |
| 576 | Alice | A | 2020-09-22 10:47:08 |
| 745 | Alice | A | 2019-05-21 14:47:08 |
| 142 | Sandra | B | 2019-09-20 16:11:08 |
| 711 | Alice | B | 2018-02-12 15:27:08 |
| 441 | Alice | A | 2018-01-29 10:57:08 |
| 371 | Sandra | A | 2017-05-20 11:17:08 |
| 115 | Sandra | A | 2016-10-12 14:47:08 |
+---------+---------------+------+-----+---------+-------+
我预计产出如下:
| ID | Client Name ID| Date (Timestamp) |
+---------+---------------+------+-----+---------+
| 878 | Alice | 2020-09-22 16:47:08 |
| 576 | Alice | 2020-09-22 10:47:08 |
| 745 | Alice | 2019-05-21 14:47:08 |
如果可能的话,如果我们可以在SQL中使用ROW_NUMBER()函数,这将非常有用
我一直在使用的SQL(但需要一些调整):
您好@sam243475您有create table语句吗?您是否有insert into table语句?你自己尝试过任何代码吗?请发布你所有的代码。您需要自己编写SQL,我们对其进行了改进。添加了SQL代码如果客户端名称ID为1列,则需要引用名称,如果是3列,则需要在它们之间添加“,”。
SELECT T.*
FROM TABLEB T
JOIN
(
SELECT Client Name ID
FROM (
SELECT Date, Client Name ID
, ROWNUMBER() OVER (PARTITION BY Client Name ID
ORDER BY Date DESC) RN
FROM TABLEB
)
WHERE RN IN (1, 2)
GROUP BY Client Name ID
HAVING MIN(ODER) = MAX(ODER) AND COUNT(1) = 2 AND MIN(ODER) = 'A'
) G
ON G.client name ID = T.client name ID
AND T.ID IN (SELECT ID FROM TABLEA WHERE ANDRI = 'P')
ORDER BY T.Client Name ID;
select b.*
from a join
b
on a.id = b.id
where a.date > (select max(a2.date)
from a a2
where a2.andri <> 'P'
);
select b.*
from b
where b.date > (select max(a2.date)
from a a2
where a2.andri <> 'P'
);