Sql 用join列出最大日期
我有两张桌子,一张是集装箱,一张是收据 我想选择值为enstock=1的容器,这些容器存在于LISTE_RECEPTD表中,仅具有最后一个接收日期max(rec_date)。 注意,一个数字可以在LISTE_RECEPTD中存在多次 关系 内容表 LISTE_RECEPTD 我创建了一个程序 问题是我有一个错误的结果Sql 用join列出最大日期,sql,firebird,greatest-n-per-group,firebird2.5,Sql,Firebird,Greatest N Per Group,Firebird2.5,我有两张桌子,一张是集装箱,一张是收据 我想选择值为enstock=1的容器,这些容器存在于LISTE_RECEPTD表中,仅具有最后一个接收日期max(rec_date)。 注意,一个数字可以在LISTE_RECEPTD中存在多次 关系 内容表 LISTE_RECEPTD 我创建了一个程序 问题是我有一个错误的结果 begin FOR SELECT conteneurs.numero FROM conteneurs WHERE conteneurs.enstock=1
begin
FOR SELECT conteneurs.numero FROM conteneurs
WHERE conteneurs.enstock=1
INTO :NUMERO
DO
BEGIN
FOR SELECT first 1 liste_receptd.recept_n ,max(liste_receptd.rec_date)
FROM liste_receptd
where liste_receptd.cont_numero=: NUMERO
group BY liste_receptd.recept_n
into :RECEPTION_N,:DATE_RECEPTION DO
SUSPEND;
suspend;
end
结束
结果
感谢您的帮助我很高兴结果很好,除了重复的行。如果只需要选择一行,只需删除
suspend
命令中的一行即可
.........
group BY liste_receptd.recept_n
into :RECEPTION_N,:DATE_RECEPTION DO
SUSPEND;
suspend; <-- REMOVE THIS
end
我认为结果是好的,除了重复的行。如果只需要选择一行,只需删除
suspend
命令中的一行即可
.........
group BY liste_receptd.recept_n
into :RECEPTION_N,:DATE_RECEPTION DO
SUSPEND;
suspend; <-- REMOVE THIS
end
为此,您需要使用子查询查找每个库存项目的最高日期,然后选择与该日期和库存项目关联的收据:
select s.*, r.*
from stock s
inner join (
select max(rec_date) as max_rec_date, stockid
from receival
group by stockid
) latest
on latest.stockid = s.id
inner join receival r
on r.stockid = latest.stockid
and r.rec_date = latest.max_rec_date
如果您只需要最新收到的库存项目,可以简化为:
select s.*, latest.*
from stock s
inner join (
select max(rec_date) as max_rec_date, stockid
from receival
group by stockid
) latest
on latest.stockid = s.id
为此,您需要使用子查询查找每个库存项目的最高日期,然后选择与该日期和库存项目关联的收据:
select s.*, r.*
from stock s
inner join (
select max(rec_date) as max_rec_date, stockid
from receival
group by stockid
) latest
on latest.stockid = s.id
inner join receival r
on r.stockid = latest.stockid
and r.rec_date = latest.max_rec_date
如果您只需要最新收到的库存项目,可以简化为:
select s.*, latest.*
from stock s
inner join (
select max(rec_date) as max_rec_date, stockid
from receival
group by stockid
) latest
on latest.stockid = s.id
我更改视图“LISTE\u RECEPTD”
李斯特
因此,我有这个查询来完成这项工作
select distinct a.cont_numero NUMERO,a.rec_date DATE_RECEPTION ,
a.recept_n
from liste_receptd a
where
(a.enstock=1 )
and (a.rec_date)=(select first 1 max(d.rec_date) last_date from liste_receptd d where
a.cont_numero=d.cont_numero
group by d.rec_date
order by d.rec_date desc)
order by a.rec_date ,a.recept_n asc
;
我更改视图“LISTE\u RECEPTD”
李斯特
因此,我有这个查询来完成这项工作
select distinct a.cont_numero NUMERO,a.rec_date DATE_RECEPTION ,
a.recept_n
from liste_receptd a
where
(a.enstock=1 )
and (a.rec_date)=(select first 1 max(d.rec_date) last_date from liste_receptd d where
a.cont_numero=d.cont_numero
group by d.rec_date
order by d.rec_date desc)
order by a.rec_date ,a.recept_n asc
;
TOW BEGIN TOW END,“SQL错误代码=-104。命令行21第1列意外结束。”我只是复制并编辑了代码的一部分。请参阅上次更新。没有测试,但这是方法。是的,它的工作与错误“算术异常,数字溢出,或字符串截断w”和新行=“null”,无论如何,谢谢,我找到了解决方案,但不是一个过程开始拖结束,“SQL错误代码=-104。意外结束的命令行21,第1列。”我只是复制和编辑您的代码的一部分。请参阅上次更新。未测试,但这就是方法。是的,它的工作方式有错误“算术异常、数值溢出或字符串截断w”和新行=“null”,无论如何,谢谢,我找到了解决方案,但没有使用过程。您的存储过程不必要地复杂(并尝试执行内部联接)。您的存储过程不必要地复杂(并尝试执行内部联接的用途).LISTE_RECEPTD在此视图中没有idview@kovarov我的查询旨在演示解决方案,它不是解决您问题的确切查询。请使用
cont\u numero
,而不是id。非常感谢,这是我的服务,我找到了解决方案,但没有使用过程。RECEPTD在此中是查看无idview@kovarov我的问题是为了证明这一点吃了这个解决方案,它不是解决您问题的确切查询。请使用cont\u numero
代替id。非常感谢,这是我的服务,我找到了解决方案,但不是通过过程