sql - Pervasive SQL 2000i 数据库上次事务查询
问题描述
我有一个旧数据库,叫做:Pervasive SQL 2000i,这个数据库来自 90 年代末和 2000 年代初。文档很少,除了来自 Actian(称为 Zen)和 Goldstar Software(很友好地回答我的问题)。这篇文章是关于如何查询每个不同时期的数据的问题。这个问题可能适用于所有数据库,因为这只是一个标准的 SQL 语句,但是对于我来说,我仍然很难在单个 SQL 语句上检索数据。
我有一个看起来像这样的 Pervasive 表:
CREATE TABLE `NLBAL` (
`acct` VARCHAR(32),
`PerioEndDate` DATE,
`Amt` DECIMAL,
`YTDAmt` DECIMAL
);
(创建表由 wtools 提供)
然后是部分数据:
Acct PeriodEndDate Amt YTDAmt
01212121221220 2017-11-30 -5000 40000
01212121221220 2017-12-31 -5000 40000
12010111111111 2020-09-31 -4000 12000
12010111111111 2020-10-31 1000 80000
如果我使用这个 SQL 语句:
SELECT Acct,PeriodEndDate,Amt,YTDAmt FROM NLBAL
WHERE PeriodEndDate = (SELECT Max(PeriodEndDate) FROM NLBAL)
当然,结果仅基于“最大”日期,将忽略其他帐户的先前日期,它将显示所有具有等效 = max 日期的记录,并忽略那些没有的记录(预期结果):
Acct PeriodEndDate Amt YTDAmt
12010111111111 2020-10-31 1000 80000
如我们所见,我的查询无法从帐户“01212121221220”中获取结果,该帐户具有 2017 年的最后一次记录交易,并且由于 2020-10-31 是表上的最新记录,数据库将使用该日期过滤结果.
我希望结果是:
Acct PeriodEndDate Amt YTDAmt
01212121221220 2017-12-31 -5000 40000
12010111111111 2020-10-31 1000 80000
我只想查询所有账户及其对应的最后一笔交易(1 个记录),无论日期是什么,只要它是每个账户的最后一笔交易。这意味着结果需要为每个帐户只记录一个记录,其中记录的交易是基于最大/最新日期的最后一个交易。
我该怎么做呢?
谢谢你的任何建议。
解决方案
好的,我最终这样做了:
SELECT Acct,Max(PeriodEndDate) as PeriodEndDate FROM NLBAL
WHERE ACCT IN
('01212121221220','12010111111111')
GROUP BY Acct --(I actually have more than 600 records to query.)
将结果导出到包含 Acct、PeriodEndDate 列的新表“ACCTPRD”。
然后我使用这个查询:
SELECT DISTINCT Acct,PeriodEndDate,Amt,YTDAmt FROM NLBAL
WHERE PeriodEndDate in (SELECT PeriodEndDate FROM ACCTPRD WHERE Acct=NLBAL.Acct)
然后我得到了我想要的结果。但是,我愿意接受比我这里的建议更优化的建议。
谢谢。
推荐阅读
- ios - 如何限制 UIImagePickerController 的文件大小?
- php - 无法使用 MadelineProto 获取频道更新
- laravel-5 - Laravel Homestead 无法连接数据库
- .net - 在身份中包含声明详细信息和用户详细信息
- google-api - 剪辑时如何获取完整的 Gmail API 消息?
- javascript - 如何在云函数中从 Firebase 数据库中检索多个值?
- python - 是否可以在执行前知道变量是否会用 ast Python 更改?
- msys2 - Windows 剪贴板的 MSYS2 路径
- latex - (Jupyter Notebook, LaTeX) LaTeX pdf 编译错误 MiKTeX209-xetex.dlll not found
- android - 有人来电时收到通知