2013-12-13 50 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