mysql - 按公司表中的多个发票日期排序,但仅显示公司列表

标签 mysql coldfusion greatest-n-per-group groupwise-maximum

我有一个正在运行的查询。但是,只能按公司名称排序,而不是按这些公司的内部发票日期排序:

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 中。

无论如何,有一个公司列表。每个公司都有多张销售(发票)。我想列出在一段时间内没有销售额的公司。我已经实现了,但是有一个小问题。我无法按时间订购它们。我理解这里的错误,由于有多个发票,每次公司都是重复的,并且不能按时间排序。但是,如果订购,则会在发票日期之前完成,因此公司会重复。但我想查看的只是包含最后销售日期时间的公司列表。每次有销售时都不会重复。希望我说清楚了:)

感谢您的帮助!

最佳答案

好吧,我自己用草莓的关于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

现在是按时间排序,不会重复公司:)

关于mysql - 按公司表中的多个发票日期排序,但仅显示公司列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20564372/

相关文章:

javascript - 如何在不重新加载页面的情况下动态地将表单字段值附加到变量

javascript - 如何根据用户在 HTML 选择中的选择更改字段?

model-view-controller - 如何着手规划模块化电子商务 Web 应用程序?

sql - 获取每组名称的最高值

mysql - 寻求一种快速更新包含重复值的记录的方法

mysql - SQL附加其他表的行

python - Pandas 在每组中获得前 n 条记录

sql - 查询显示各部门工资最低的员工

数字列上的 MySQL 索引使查询变慢

mysql - 我如何结合我的两个查询