我有一个名为“代金券”的表,它包含名为“voucher_value”和“redeemed_at”的字段。 redeemed_at采用Unix时间戳格式(由PHP time()函数生成)。
所以我需要从月初开始获得总数voucher_value。
那是什么SQL代码?
感谢。
答案 0 :(得分:3)
我相信您会在docs中找到所需的所有日期和时间功能。
修改强>:
马克的回答非常好。如果您追逐最后一滴性能,您的列类型为timestamp(请注意区域和范围限制),然后您有一个索引:
SELECT SUM(voucher_value)
FROM vouchers
WHERE redeemed_at BETWEEN
UNIX_TIMESTAMP(DATE_ADD(LAST_DAY(DATE_SUB(NOW(), interval 1 month)), interval 1 day))
AND
UNIX_TIMESTAMP(DATE_SUB(DATE_ADD(LAST_DAY(NOW()), interval 1 day), interval 1 second))
应该快得多(因为它不必对redeemed_at
应用任何转换。表达式很大/很复杂(并且没有经过彻底的测试,肯定可以写得更简单/更短),但重要的是它们常量并且每次查询只评估一次。用参数替换NOW()
以获得两件事
NOW()
)答案 1 :(得分:1)
类似的东西:
SELECT SUM(voucher_value)
FROM vouchers
WHERE MONTH(FROM_UNIXTIME(redeemed_at)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(redeemed_at)) = YEAR(CURDATE())
也许