我一直在讨论这个问题,所以现在我在这里:)我是一个SQL初学者,所以也许这对你们来说很容易......
我有这个问题:
SELECT COUNT(*) AS counter, recur,subscribe_date
FROM paypal_subscriptions
WHERE recur='monthly' and subscribe_date > "2010-07-16" and subscribe_date < "2010-07-23"
GROUP BY subscribe_date
ORDER BY subscribe_date
现在我上面显示的日期是硬编码的,我的应用程序将提供可变的日期范围。
现在我得到一个结果表,其中有该日期的值。
counter |recur | subscribe_date
2 | Monthly | 2010-07-18
3 | Monthly | 2010-07-19
4 | Monthly | 2010-07-20
6 | Monthly | 2010-07-22
如果日期不存在,我想在柜台栏中返回。
counter |recur | subscribe_date
0 | Monthly | 2010-07-16
0 | Monthly | 2010-07-17
2 | Monthly | 2010-07-18
3 | Monthly | 2010-07-19
4 | Monthly | 2010-07-20
0 | Monthly | 2010-07-21
6 | Monthly | 2010-07-22
0 | Monthly | 2010-07-23
这可能吗?
答案 0 :(得分:0)
您需要一张日期表才能分组。这在使用CTE的MSSQL中非常容易this - 我不确定MySQL是否有类似的东西? 否则,您将需要创建一个硬表作为一次性练习
编辑:试一试:
SELECT COUNT(pp.subscribe_date) AS counter, dl.date, MIN(pp.recur)
FROM date_lookup dl
LEFT OUTER JOIN paypal pp
on (pp.subscribe_date = dl.date AND pp.recur ='monthly')
WHERE dl.date >= '2010-07-16' and dl.date <= '2010-07-23'
GROUP BY dl.date
ORDER BY dl.date
最后,在选择列表中显示pp.recur不起作用。
我使用了聚合,但如果没有PayPal记录,则MIN(pp.recur)将返回null
参数化查询时可以执行的操作是重复重复类型过滤器吗? 再次,PLZ原谅MSSQL语法
SELECT COUNT(pp.subscribe_date) AS counter, dl.date, @ppRecur
FROM date_lookup dl
LEFT OUTER JOIN paypal pp
on (pp.subscribe_date = dl.date AND pp.recur =@ppRecur)
WHERE dl.date >= @DateFrom and dl.date <= @DateTo
GROUP BY dl.date
ORDER BY dl.date
答案 1 :(得分:0)
您需要一个日期表(添加新表),然后您必须在该表和查询之间进行外部联接。
这个问题也与另一个问题类似。答案可能非常相似。
答案 2 :(得分:0)
由于没有简单的方法可以做到这一点,我必须让应用程序为我填空,而不是让数据库返回我想要的数据。我确实因此而受到了性能影响,但有必要完成报告。
我一定会考虑在不久的将来从数据库中返回我想要的内容。我会试试nonnb的解决方案。
谢谢大家!