Я использую My Sql 5.7 и CF11. Я хочу получить общий идентификатор qTotalPrice и quoteKeyID за каждый месяц из запроса ниже. Но не полный год. Я хочу получить данные от текущего месяца до последних шести месяцев (с июля по февраль). Если нет данных за конкретный месяц, мне нужно отобразить как 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>
и т. д. Как мудрый я должен получить последние шесть месяцев. Поэтому я написал несколько запросов на каждый месяц.
Есть ли возможность уменьшить код?
cf_sql_clob
, и обычно рекомендуется включать год и месяц, чтобы различать в случае перекрытия периодов времени (хотя здесь их не будет ...). - person SOS   schedule 31.07.2018