2013-12-13 79 views
0

我有一個查詢正在工作。然而,這僅僅是由公司名稱排序,而不是這些公司的內部發票的日期:按發票日期順序排列,並且在公司表中是多個,但只顯示公司列表

SELECT C.FULLNAME,C.COMPANY_ID,I.INVOICE_DATE FROM COMPANY C 
     JOIN #dsn2_alias#.INVOICE I ON I.COMPANY_ID = C.COMPANY_ID 
     WHERE I.INVOICE_ID IS NOT NULL AND I.INVOICE_DATE <= #attributes.date# 
     AND C.COMPANY_ID NOT IN ( 
      SELECT C.COMPANY_ID FROM COMPANY C JOIN #dsn2_alias#.INVOICE I ON I.COMPANY_ID = C.COMPANY_ID WHERE I.INVOICE_ID IS NOT NULL AND I.INVOICE_DATE >= #attributes.date# 
     ) 
     GROUP BY C.COMPANY_ID,C.FULLNAME,I.INVOICE_DATE ORDER BY C.FULLNAME 

輸出:

<cfoutput query="get_companies" group="company_id"> 
      <tr height="20" onMouseOver="this.className='color-light';" onMouseOut="this.className='color-row';" class="color-row"> 
       <td style="text-align:center;">#row#</td> 
       <td style="text-align:center;">#dateformat(INVOICE_DATE,'dd/mm/yyyy')#</td> 
       <td>#fullname#</td> 
      </tr> 
      <cfset row++/> 
     </cfoutput> 

其實group by條款不從查詢工作。它被分組在cfoutput中。

無論如何,有一個公司的名單。每家公司都有多個銷售(發票)。我想列出一段時間內沒有銷售的公司。我已經實現了它,但有一點問題。我無法按時間訂購它們。我明白這裏的錯誤,因爲有多張發票,公司每次都重複一次,不能按時間排序。但是,如果訂購它們,則按發票日期完成,因此公司會重複。但我想看到的是最後一個銷售日期時間的公司列表。每次出售時都不會重複。希望我很清楚:)

謝謝你的幫助!

+1

這是一個INNER JOIN。發票表中的invoice_id可能爲NULL是不可能的。除此之外,考慮將適當的DDL(和/或sqlfiddle)與期望的結果集一起提供。或者只是看到在GROUPWISE-MAXIMUM – Strawberry

+0

@Strawberry下面列出的1000個查詢中的任何一個,這就是爲什麼即時通訊問我如何實現它,而不使用內部連接或以任何其他方式。我不知道如何使用jsfiddle與sql,我只能顯示圖像的輸出,我怎麼可以使用GROUPWISE-MAXIMUM? –

回答

0

好吧,我解決了自己使用約GROUPWISE-MAXIMUM草莓的提示:

SELECT C.FULLNAME,C.COMPANY_ID,I.INVOICE_DATE 
FROM COMPANY C INNER JOIN 
      ( 
       SELECT I.COMPANY_ID,MAX(I.INVOICE_DATE) AS INVOICE_DATE 
       FROM #dsn2_alias#.INVOICE I GROUP BY I.COMPANY_ID 
      ) 
      I ON I.COMPANY_ID = C.COMPANY_ID 

WHERE I.INVOICE_DATE <= #attributes.date# 
AND  C.COMPANY_ID NOT IN 
     ( 
      SELECT C.COMPANY_ID 
      FROM COMPANY C JOIN #dsn2_alias#.INVOICE I ON I.COMPANY_ID = C.COMPANY_ID 
      WHERE I.INVOICE_ID IS NOT NULL 
      AND I.INVOICE_DATE >= #attributes.date# 
     ) 
GROUP BY C.COMPANY_ID,C.FULLNAME,I.INVOICE_DATE ORDER BY I.INVOICE_DATE 

現在是按時間排序,不重複的公司:)

+0

不要忘記使用'cfqueryparam' – Leigh