我正在使用SQL5.7和cf11。我想从下面的查询中得到每个月的总qtotalprice"ekeyid。但不是一整年。我想得到从本月到上半年的数据(从7月到2月)。如果没有特定月份的数据,我需要显示为特定月份的0。
<cfquery name="thisYearsQuotes" datasource="myDB">
SELECT * , MONTH(qDateTime) as qMonth
FROM Quotes
INNER JOIN Accounts
ON Quotes.aID = Accounts.aID
WHERE Accounts.aID = <cfqueryparam value="#VNAI.aID#" cfsqltype="cf_sql_clob" maxlength="255">
AND Quotes.qDateTime > DATE_ADD(NOW(), INTERVAL -365 DAY)
</cfquery>
这些查询的结果
为了得到每个月的记录,我编写了一个查询,如下所示。
用于获取当前月份
<cfquery name="SalesTotalThisMonth" dbtype="query">
SELECT SUM(qTotalPrice) as DollarTotal , COUNT(quoteKeyID) as QuoteCount
FROM thisYearsQuotes
WHERE qMonth = #MONTH(NOW())#
</cfquery>
一个月后回来
<cfquery name="SalesTotal1MonthAgo" dbtype="query">
SELECT SUM(qTotalPrice) as DollarTotal , COUNT(quoteKeyID) as QuoteCount
FROM thisYearsQuotes
WHERE qMonth = #MONTH(DateAdd("m",-1,NOW()))#
</cfquery>
两个月后回来,
<cfquery name="SalesTotal2MonthAgo" dbtype="query">
SELECT SUM(qTotalPrice) as DollarTotal , COUNT(quoteKeyID) as QuoteCount
FROM thisYearsQuotes
WHERE qMonth = #MONTH(DateAdd("m",-2,NOW()))#
</cfquery>
等。。。像智者一样,我必须在过去的六个月里。所以我每个月都会写一些查询。
有没有可能减少代码?
2条答案
按热度按时间ego6inou1#
更新
解决方案是为您需要的所有月份创建一个查询,然后使用左连接。
SELECT 8 AS monthNum UNION SELECT 7 AS m UNION SELECT 6 AS m UNION SELECT 5 AS m UNION SELECT 4 AS m UNION SELECT 3 AS m
为了使其自动化,我添加了一些cf代码来创建上面的查询。最初的
我想你可以用适当的方法在一个查询中完成
group by
.bhmjp9jg2#
我通过添加一个主表名reportmonths得到了解决方案。它有12行数据,上一年是月和年列。因此,通过将该表与我的查询正确连接来实现它。所以现在我可以用limit6得到最近6个月的记录。