按日期订购多张发票并在公司表中,但仅显示公司列表

Posted

技术标签:

【中文标题】按日期订购多张发票并在公司表中,但仅显示公司列表【英文标题】:order by date of invoices which are multiple and in company table, but show only list of companies 【发布时间】:2014-01-01 02:18:25 【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

这是一个内部联接。发票表中的 invoice_id 不可能为 NULL。除此之外,请考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集。或者只查看 GROUPWISE-MAXIMUM 下列出的 1000 个查询中的任何一个 @Strawberry 是的,这就是为什么我问我如何在不使用内部连接或任何其他方式的情况下实现它。我不知道如何在 sql 中使用 jsfiddle,我只能显示输出图像,我如何使用 GROUPWISE-MAXIMUM? 【参考方案1】:

好的,我自己解决了,使用草莓关于 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

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

【讨论】:

别忘了使用cfqueryparam

以上是关于按日期订购多张发票并在公司表中,但仅显示公司列表的主要内容,如果未能解决你的问题,请参考以下文章

发票上的截止日期是以开票日期为准还是以报销日期为准?

我要创建付费销售发票的透明报表

Pandas:按第一次和最后一次出现填充每一行

在 ms 访问中使用“IF”和“DLookup”

像在Facebook上那样显示和订购帖子

SQL - 在按创建日期订购“重复重新推送”时显示一行两次