Sql 根据另一列获取最新日期
我有一个数据集,其中包括一列DATETIME和一列BANKCASENUMBER。我想为每个BANKCASENUMBER选择包含最新日期的行 这就是我尝试过的:Sql 根据另一列获取最新日期,sql,sas,Sql,Sas,我有一个数据集,其中包括一列DATETIME和一列BANKCASENUMBER。我想为每个BANKCASENUMBER选择包含最新日期的行 这就是我尝试过的: PROC SQL; CREATE TABLE WORK.QUERY_FOR_WORK_QUERY_FOR_ACCOUNT AS ORDER BY t1.DATETIME LIMIT 1 SELECT t1.LOGINNAME, t1.FORENAME, t1.SURNAME,
PROC SQL;
CREATE TABLE WORK.QUERY_FOR_WORK_QUERY_FOR_ACCOUNT AS
ORDER BY t1.DATETIME LIMIT 1
SELECT t1.LOGINNAME,
t1.FORENAME,
t1.SURNAME,
t1.BANKCASENUMBER,
MAX(t1.DATETIME),
t1.'Inbound/outbound'n,
t1.'succesvol?'n
FROM WORK.WORK_QUERY_FOR_ACCOUNTACTIVITIES t1
GROUP BY t1.BANKCASENUMBER;
QUIT;
返回的表应为每个BANKCASENUMBER的行添加latset DATETIME。所以每个银行账号都应该出现一次。我相信这就是你要找的。其思想是获取子查询中每个银行案例编号的最新时间戳,并将其连接到主表
PROC SQL;
CREATE TABLE WORK.QUERY_FOR_WORK_QUERY_FOR_ACCOUNT AS
SELECT t1.LOGINNAME,
t1.FORENAME,
t1.SURNAME,
t1.BANKCASENUMBER,
t1.DATETIME,
t1.'Inbound/outbound'n,
t1.'succesvol?'n
FROM WORK.WORK_QUERY_FOR_ACCOUNTACTIVITIES t1
JOIN (
SELECT t2.bankCaseNumber,
MAX(t2.dateTime) as maxDateTime
FROM WORK.WORK_QUERY_FOR_ACCOUNTACTIVITIES t2
GROUP BY t2.BANKCASENUMBER
) m
ON m.bankCaseNumber = t1.bankCaseNumber
AND t1.dateTime = m.maxDateTime
;
QUIT;
这似乎有点简单。由于我们是按LOGINNAME分组的,having语句将引用每个组中的max(DATETIME)
proc sql noprint;
create table QUERY_FOR_WORK_QUERY_FOR_ACCOUNT as
select * from WORK_QUERY_FOR_ACCOUNTACTIVITIES
group by LOGINNAME
having DATETIME = max(DATETIME);
quit;
你用的是什么产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称(并且您的代码是无效的标准SQL)。请为您正在使用的数据库产品添加…如果将光标悬停在
SQL
标记上,您将看到它要求您指定您正在使用的SQL版本。例如,MySQL的做法与SQL Server不同。另外,当你尝试一些不起作用的事情时,请描述一下你预期会发生什么,以及实际发生了什么。在您的情况下,您可能会收到一条错误消息,该消息应始终包含在您的问题中。我编辑了标记,我正在SAS enterprice Guide中使用sql我包含了data@Parfait-如果您注意到细节,您会看到SAS在我们的评论后被标记,正如前面提到的proc-sql
。我查看了这段代码的结果,但这不是我想要的。这只是给了我每个BANKCASENUMBER分组的所有日期时间。我只想提取每个银行账号的最新日期时间。@AtalAtmar-我想你弄错了。子查询为每个BankCaseNumber
查找最近的日期时间
,外部查询为那些BankCseNumber、日期时间
组合查找完整的匹配记录。