选择到期日期最近的记录[重复]

Posted

技术标签:

【中文标题】选择到期日期最近的记录[重复]【英文标题】:Select records with nearest expiration date [duplicate] 【发布时间】:2021-05-07 05:09:26 【问题描述】:

我对 Access 还很陌生。 我有带有IDExprDateLOT 字段的“库存”表,ID 是可复制的,而 LOT 是唯一索引。 像这样的:

ID      LOT   ExprDate
1001    A1    30/12/22
1001    B1    30/12/23
1002    A2    30/12/23
1002    B2    30/12/24
1003    A3    30/12/25

我正在尝试进行查询,它选择具有最近 ExprDate 的唯一 ID 并返回它们的 LOT,如下所示:

ID      LOT   ExprDate
1001    A1    30/12/22
1002    A2    30/12/23
1003    A3    30/12/25

但到目前为止还没有。 (我应该提到 ExprDate 是一个未来的日期)

我试过了

SELECT * 
FROM Inventory 
WHERE (((Inventory.Exp)=(SELECT MIN(Inventory.Exp) FROM Inventory)));

但它只返回一条日期最近的记录。 我也尝试在总行中选择 min 但它返回所有记录。

我假设有 2 个查询的解决方法,一个选择具有多个 LOT 和日期的唯一 ID,第二个返回距离第一个最近日期的 LOT。但如果有办法,我想在一个查询中完成所有操作。

感谢您的阅读,祝您有美好的一天。

【问题讨论】:

应该只包括未来的日期还是已经过期的日期? 最好两者都有。但实际上它们都在未来 如果您从查询中添加一些示例数据和预期数据会很棒 我做到了。帖子中有2张图片。它们是 imgur 链接。对不起。我真的不擅长这个.. 数据应该是文本表格而不是图像。 【参考方案1】:
create table inventory
(
    id        int,
    lot       varchar(10),
    expr_date date
);


insert into inventory
values (1001, 'A1', '20-12-2023'::date),
       (1001, 'B1', '20-12-2025'::date),
       (1002, 'A2', '20-12-2024'::date),
       (1002, 'B2', '20-12-2020'::date),
       (1003, 'A3', '20-11-2023'::date);


select i1.*
from inventory i1
join (
    select id, min(expr_date) as expr_date
    from inventory
    group by id
) i2
on i1.id = i2.id and i1.expr_date = i2.expr_date;


-- output
-- id       lot     expr_date
-- --------------------------
-- 1001     A1      2023-12-20
-- 1002     B2      2020-12-20
-- 1003     A3      2023-11-20

注意 - 这是在 postgresql 12 上测试的,但也应该与其他 SQL DBMS 大部分兼容。

【讨论】:

以上是关于选择到期日期最近的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Oracle中选择具有最近日期和时间的记录[重复]

如何为 Firestore 文档设置到期日期 [重复]

根据日期仅选择每条记录的最新版本 | MS Access [重复]

按最近日期加入 BigQuery 中具有重复记录的表

在广播接收器中使用 setExact() 重复

用于验证日期的正则表达式 [重复]