2011-04-22 82 views
2
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' 

 在在线查看SQL

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_num & 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表的主键。

回答

0

这是您正在查找的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是主键,因此每个发票都将显示在您的结果中。

但是,您仍然需要发票中的信息,这就是为什么您需要将im_invoice添加回FROM条款。

0

这给你的每inventory_num最新invoice_datebilling_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