gpt4 book ai didi

sql - 返回只有最近 TIME 值的记录?

转载 作者:行者123 更新时间:2023-12-02 04:35:37 26 4
gpt4 key购买 nike

我有一张表需要进行一些数据转换。这是一个简单的跟踪表,如下所示:

  1. SSN 9,0 KEY(例如 123456789)非空
  2. DATE 8,0 KEY(例如 20131202)非空
  3. TIME 6,0 KEY(例如 133000)非空
  4. PRINT_NEW Z(例如 2013-12-02-11.23.47.965000)(使用了 CURRENT_TIMESTAMP)非空
  5. PRINT_OLD Z(例如 2013-12-02-11.23.47.965000)(CURRENT_TIMESTAMP使用)可空

之前我将当前系统时间插入到 [TIME] 字段中,但是,我应该做的是插入我在处理中加入的变更日志中的 [TIME] 字段。

作为此转换的开始,我尝试从我的跟踪表中选择 [SSN]、[DATE]、[TIME],并从更改日志中选择 [TIME]([TIME] 在我的跟踪中的值表实际上应该包含)。

然而,我遇到的问题是更改日志可以有多个条目,即使是在 1 个特定日期。例如,我的以下尝试返回以下内容:

SELECT DISTINCT a.SSN, a.DATE, a.TIME, b.TIME AS CORRECT_TIME
FROM trackTable a, changeLog b
WHERE (a.SSN = b.SSAN) AND (a.DATE = b.DATE)

结果:

SSN | DATE | TIME | CORRECT_TIME
123456789 | 20140117 | 94738 | 91541
123456789 | 20140117 | 94738 | 91542
678912345 | 20140123 | 124542 | 144557
678912345 | 20140123 | 124542 | 144558
678912345 | 20140123 | 124542 | 144559
678912345 | 20140123 | 124542 | 144600

我的问题是,如何才能只为字段 [CORRECT_TIME] 选择最近的值?我一直在尝试连接和 where 子句的几种变体,但我对 SQL 还是很陌生。

最佳答案

尝试公用表表达式。可以说,“with xxx as (...)”部分将在内存中创建一个临时表。对于通过 GROUP BY SSN、DATE 的 SSN 和 DATE 的每个唯一组合,该表将通过 MAX(TIME) 包含最新时间。

一旦您获得了每个 SSN/DATE 的最晚时间,您就可以在主查询中加入回它。

with latest as (select ssn, date, max(time) as latest_time from changelog group by ssn, date)
select t.ssn, t.date, t.time, latest_time
from tracktable t join latest l on t.ssn = l.ssn and t.date = l.date
order by t.ssn, t.date, t.time;

关于sql - 返回只有最近 TIME 值的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com