como faço para buscar a última data e a data mais próxima de um valor
12/04/2019
0
table_ent | table_out
cod_prod date_ent vl_prod | cod_prod date_out vl_prod
362 14/09/2015 100,00 | 362 01/10/2016 700,00
362 15/09/2015 150,00 | 362 07/10/2016 800,00
362 16/09/2015 10,00 | 362 29/10/2016 100,00
362 05/10/2016 20,00 | 362 01/10/2016 800,00
362 06/10/2016 300,00 |
362 07/10/2016 460,00 |
362 08/10/2016 510,00 |
362 23/10/2016 620,00 |
362 24/10/2016 750,00 |
362 25/10/2016 810,00 |
362 30/10/2019 920,00 |
Estou usando um inner join com a max(data) de entrada porém retorna os valores com duplicidades
cod_ent date_out vl_ent cod_ent vl_ent date_ent
------ -------- ------ --- --- -------
362 01/10/16 700 362 100 14/09/15
362 01/10/16 800 362 10 16/09/15
362 01/10/16 700 362 150 15/09/15
362 01/10/16 700 362 10 16/09/15
362 01/10/16 800 362 150 15/09/15
362 01/10/16 800 362 100 14/09/15
362 07/10/16 100 362 20 05/10/16
362 07/10/16 100 362 300 06/10/16
362 07/10/16 100 362 100 14/09/15
362 07/10/16 100 362 10 16/09/15
362 07/10/16 100 362 150 15/09/15
362 29/10/16 920 362 510 08/10/16
362 29/10/16 920 362 750 24/10/16
362 29/10/16 920 362 460 07/10/16
362 29/10/16 920 362 10 16/09/15
O resultado esperado seria esse:
cod_ent date_out vl_ent cod_ent vl_ent date_ent
------ -------- ------ --- ----- --------------
362 01/10/16 700 362 100 14/09/15
362 01/10/16 800 362 10 16/09/15
362 07/10/16 100 362 20 06/10/16
362 29/10/16 920 362 750 25/10/16
Alex
Posts
12/04/2019
Chromusmaster
12/04/2019
Alex
select a.cod_prod, a.date_out, a.vl_prod, sum(b.cod_prod) as cod_prod, sum(b.vl_prod) vl_prod, max(b.date_ent) as date_ent
from table_out a
join table_ent b on b.cod_prod = a.cod_prod and b.date_ent < a.date_out
group by a.cod_prod, a.date_out, b.cod_prod, a.vl_prod, b.vl_prod
order by a.cod_prod, a.date_out;
12/04/2019
Alex
os valores vêm duplicados, precisava apenas trazer a "última entrada mais próxima" da data de saida uma única vez
12/04/2019
Emerson Nascimento
select a.cod_prod, a.date_out, a.vl_prod, sum(b.vl_prod) vl_prod_ent, max(b.date_ent) as date_ent from table_out a join table_ent b on b.cod_prod = a.cod_prod and b.date_ent < a.date_out group by a.cod_prod, a.date_out, a.vl_prod order by a.cod_prod, a.date_out
somente retirei os campos desnecessários do group by.
12/04/2019
Alex
12/04/2019
Alex
cod_ent--------date_out-------vl_ent----cod_ent-------vl_ent----- date_ent
362---------------01/10/16------700-------362-------------10------------16/09/15
362---------------01/10/16------800-------362-------------10------------16/09/15
362---------------07/10/16------100-------362------------300-----------06/10/16
362---------------29/10/16------920-------362-------------750----------25/10/16
15/04/2019
Emerson Nascimento
select a.cod_prod, a.date_out, a.vl_out, a.date_ent, sum(b.vl_prod) vl_ent from ( select a.cod_prod, a.date_out, a.vl_prod vl_out, max(b.date_ent) as date_ent from table_out a join table_ent b on b.cod_prod = a.cod_prod and b.date_ent < a.date_out group by a.cod_prod, a.date_out, a.vl_prod ) a join table_ent b on b.cod_prod = a.cod_prod and b.date_ent = a.date_ent group by a.cod_prod, a.date_out, a.vl_out, a.date_ent order by a.cod_prod, a.date_out
O resultado foi:
COD_PROD DATE_OUT VL_OUT VL_ENT DATE_ENT 362 01.10.2016 700 10 16.09.2015 362 01.10.2016 800 10 16.09.2015 362 07.10.2016 800 300 06.10.2016 362 29.10.2016 100 810 25.10.2016
Clique aqui para fazer login e interagir na Comunidade :)