作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要生成一份报告,提供特定一周内使用的每个特定促销代码的计数。示例表结构:
CREATE TABLE `user_promo_codes` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) unsigned NOT NULL,
`promo_code` longtext NOT NULL,
`last_updated` datetime NOT NULL,
PRIMARY KEY (`id`),
)
我想要的是给定一周内使用的每个特定促销代码的计数。我现在拥有的:
SELECT promo_code, count(*) AS count
FROM user_promo_codes
WHERE last_updated BETWEEN
FROM_UNIXTIME( # one week ago
UNIX_TIMESTAMP( DATE_SUB( NOW(), INTERVAL 7 DAY ) ) - TIME_TO_SEC( NOW() )
)
AND
FROM_UNIXTIME(
UNIX_TIMESTAMP( NOW() ) - TIME_TO_SEC( NOW() )
)
GROUP BY value
有没有更有效的方法?
最佳答案
对于您显示的数据类型,这应该适用于现在的前一周。
SELECT promo_code, COUNT(*) AS count
FROM user_promo_codes
WHERE last_updated BETWEEN DATE_SUB( NOW(), INTERVAL 7 DAY ) AND NOW()
GROUP BY promo_code
旁白:
promo_code
使用 LONGTEXT
将确保在磁盘上有一个临时表。可能最好将其设为 VARCHAR(N)
。last_updated
上的索引将随着表的增长而变得非常宝贵。更新
NOW()
-> 最近的星期三@00:00:00
。
SELECT promo_code, COUNT(*) AS count
FROM user_promo_codes
WHERE last_updated BETWEEN
DATE_SUB( CONCAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE())+5 DAY) ,' 00:00:00'), INTERVAL 7 DAY )
AND
CONCAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE())+5 DAY) ,' 00:00:00')
GROUP BY promo_code
这就是上面的
CONCAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE())+5 DAY) ,' 00:00:00')
换入 NOW()
。
关于mysql - MySQL 在给定一周内检索值的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382153/
我正在寻找一种算法来计算 n 类(学生姓名列表)中 w 周的配对,以便学生永远不会在两个不同的星期内与同一名学生合作。假设 n 是偶数。 例子: 类(class):学生 1,2,3,4 周数:3 第
我是一名优秀的程序员,十分优秀!