【发布时间】:2021-10-17 16:06:18
【问题描述】:
当我加入正确的表时,我得到了太多的重复项。我正在尝试从正确的表中获取最新记录,但是无论我尝试什么都行不通。
到目前为止我已经尝试过:
PROC SQL;
CREATE TABLE fs1.sample AS
SELECT A.*,
B.xx1,
max(B.time_s)
FROM lx1.results a left join (Select Distinct C.id, c.per FROM lx2.results c
Where c.id = a.id
and COMPGED(a.txt1, c.txt1,'i') < 100
and c.dt > a.dt
and c.ksv = 37
and datepart(c.lsg) >= '12DEC2020'd ) b
ON a.id = b.id
group by a.id, a.txt1
QUIT;
很遗憾,我收到了一个错误。我也尝试在存在时使用案例,但这需要的时间太长了。本质上,我试图根据 time_s 从正确的表中获取最新记录。我还想确保我从右表中抓取的记录与 a.txt1 匹配。
干杯
【问题讨论】:
-
有几个问题。一是
B.xx1可能在功能上不依赖于GROUP BY术语,并且您的数据库(Oracle)不能很好地处理间接功能依赖,因此您的SELECT A.*可能会成为问题。提供create table语句,以及每个表的约束。 -
请分享示例数据和所需的输出。
-
对不起,但是 - 这真的是 Oracle 吗? “PROC SQL”和“QUIT”表明它不是(至少,我从未见过前者,而后者用于“退出”你的 SQL*Plus 会话,但是 - 对我来说 - 它看起来好像它“终止了” " PROC SQL 语句 ...
-
@not_that_simple 。 . .我真的不明白你的问题。您的查询有很多逻辑,不仅仅是获取最新的行。这个逻辑在问题中没有解释。目前还不清楚您要做什么。样本数据和期望的结果会有所帮助。您还需要解释基本的事情,例如您如何识别最近的记录。
-
@Littlefoot、
PROC_SQL和QUIT是 SAS 语言中使用的专有词。它的扩展之一是 PROC_SQL,它允许 SAS 程序与支持 ANSI SQL 的数据库进行交互。