#sql #inline
#sql #встроенный
Вопрос:
SELECT ddd.invoice_fk,sss.invoice_rid, ddd.inventory_num, sss.billing_account, sss.Invoice_date
FROM ( SELECT invoice_rid, billing_account, max(invoice_date) as Invoice_date
FROM im_invoice
group by invoice_rid, billing_account ) sss, im_invoice_inventory ddd
where ddd.invoice_fk= sss.invoice_rid
and ddd.inventory_num = '1131497271'
O/P
206973 206973 1131497271 1011964 2010-01-02 00:00:00.000
206974 206974 1131497271 1011964 2009-12-02 00:00:00.000
214493 214493 1131497271 1011964 2010-02-02 00:00:00.000
249202 249202 1131497271 1011964 2010-04-02 00:00:00.000
Привет, из этого запроса я не могу узнать последнюю дату для инвентарных номеров, пожалуйста, помогите мне с этим.
Вот структура таблицы:
- У одной платежной учетной записи может быть несколько номеров счетов (в запросе invoice_num мы не используем,).
- Invoice_rid и invoice_fk будут генерироваться в отношении invoice_num.
- У одного invoice_num может быть несколько запасов.
- Inventory_numm и invoice_fk доступны в таблице im_invoice_inventroy
Вот данные счета:
Ap Extracted 040402634066
Claro Argentina
03/01/2010 03/19/2010 20097727994 CD $0.00 $3,293.45 $3,293.45
Ap Extracted 040402719235
Claro Argentina
04/01/2010 04/20/2010 20097727994 CD $0.00 $1,374.84 $1,374.84
Ap Extracted 040402804459
Claro Argentina
05/01/2010 05/19/2010 20097727994 CD $0.00 $1,253.60 $1,253.60
Ap Extracted 040403143672
Claro Argentina
09/01/2010 09/21/2010 20097727994 CD $0.00 $1,312.80 $1,312.80
Ap Extracted 040403060776
Claro Argentina
08/01/2010 08/19/2010 20097727994 CD $0.00 $1,777.59 $1,777.59
Ap Extracted 040402976157
Claro Argentina
07/01/2010 07/20/2010 20097727994 CD $0.00 $1,946.75 $1,946.75
Ap Extracted 040402890800
Claro Argentina
06/01/2010 06/18/2010 20097727994 CD $0.00 $1,435.70 $1,435.70
Ap Extracted 040403563442
Claro Argentina
02/01/2011 02/18/2011 20097727994 CD $0.00 $1,180.03 $1,180.03
Ap Extracted 040403488021
Claro Argentina
01/01/2011 01/19/2011 20097727994 CD $0.00 $1,282.31 $1,282.31
Ap Extracted 040403406547
Claro Argentina
12/01/2010 12/21/2010 20097727994 CD $0.00 $1,803.05 $1,803.05
Ap Extracted 040403650134
Claro Argentina
03/01/2011 03/18/2011 20097727994 CD $0.00 $1,357.64 $1,357.64
и, пожалуйста, объясните, как я могу более эффективно использовать встроенный запрос в SQL-запросах.
В приведенном выше запросе invoice_fk является внешним ключом для таблицы im_invoice, а invoice_rid является первичным ключом для таблицы im_invoice.
Ответ №1:
Это тот SQL, который вы ищете.
SELECT ddd.invoice_fk,
sss.invoice_rid,
ddd.inventory_num,
sss.billing_account,
sss.invoice_date
FROM (SELECT billing_account,
MAX(invoice_date) AS invoice_date
FROM im_invoice
GROUP BY
billing_account) sss
INNER JOIN im_invoice inv
ON sss.billing_account = inv.billing_account
and sss.invoice_date = = inv.invoice_date
INNER JOIN im_invoice_inventory ddd
ON ddd.invoice_fk = inv.invoice_rid
WHERE
AND ddd.inventory_num = '1131497271'
В принципе, вам нужно удалить invoice_rid из вашего подзапроса. Причина этого в том, что invoice_rid является первичным ключом, поэтому каждый счет будет представлен в ваших результатах.
Однако вам все еще нужна информация в invoice, поэтому вам нужно добавить im_invoice обратно в FROM
предложение.
Ответ №2:
Это дает вам самую последнюю информацию invoice_date
для каждого inventory_num
в каждом billing_account
:
SELECT
i.billing_account,
ii.inventory_num,
MAX(i.invoice_date) AS latest_invoice_date
FROM im_invoice i
INNER JOIN im_invoice_inventory ii ON i.invoice_rid = ii.invoice_fk
GROUP BY i.billing_account, ii.inventory_num