我有一个包含MLSNumber,ListingContractDate,CloseDate的表。
我想总结一下从当月开始的一个月的活动,然后回到2000年1月。
我有这个声明,按月总结了ListingContractDate。
SELECT COUNT(MLSNumber) AS NewListings, DATE_FORMAT(ListingContractDate,'%M %Y')
FROM Listings
WHERE Neighbourhood = 'Beachside'
AND ListingContractDate >= '2000-01-01'
GROUP BY YEAR(ListingContractDate), MONTH(ListingContractDate)
ORDER BY ListingContractDate DESC
这个陈述的两个问题是如果在特定月份没有发现它跳过那个月,我需要返回0,所以没有几个月丢失,我不知道如何得到相同的数量CloseDate字段或者我只需运行第二个查询,并使用PHP按月和年匹配两个结果。
答案 0 :(得分:0)
一个特别有用的项目是一个“计数表”,它只包含一组整数。我使用了一个找到HERE的脚本来生成这样一个表。
使用该表,我现在可以将与时间相关的数据LEFT JOIN连接到它,如下所示:
set @startdt := '2000-01-01';
SELECT COUNT(MLSNumber) AS NewListings, DATE_FORMAT(T.Mnth,'%M %Y')
FROM (
select
tally.id
, date_add( @startdt, INTERVAL (tally.id - 1) MONTH ) as Mnth
, date_add( @startdt, INTERVAL tally.id MONTH ) as NextMnth
from tally
where tally.id <= (
select period_diff(date_format(now(), '%Y%m'), date_format(@startdt, '%Y%m')) + 1
)
) t
LEFT JOIN Temp On Temp.ListingContractDate >= T.Mnth and Temp.ListingContractDate < T.NextMnth
GROUP BY YEAR(T.Mnth), MONTH(T.Mnth)
ORDER BY T.Mnth DESC
Logc,
Temp.ListingContractDate&gt; = T.Mnth和Temp.ListingContractDate&lt; T.NextMnth