В строке просмотр SQL

#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