选择到期日期最近的记录[重复]
Posted
技术标签:
【中文标题】选择到期日期最近的记录[重复]【英文标题】:Select records with nearest expiration date [duplicate] 【发布时间】:2021-05-07 05:09:26 【问题描述】:我对 Access 还很陌生。
我有带有ID
、ExprDate
和LOT
字段的“库存”表,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 大部分兼容。
【讨论】:
以上是关于选择到期日期最近的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章