我有以下MySQL查询,我正在尝试调整它,因此它只获取当前月份(当前年份)内的结果,我猜你可能需要更多关于我的MySQL结构的信息所以在这里 - 我有一个由time()
列time
列(referrals
表)中存储的PHP t2.time
生成的UNIX时间戳,所以使用下面的设置它将是WHERE
所以我的问题是我不确定如何继续,我猜这会像在AND t2.time IS WITHIN THE CURRENT MONTH
子句的末尾添加以下内容? => SELECT t1.username,
t1.website,
SUM(IF(t2.type = 'in', 1, 0)) AS in_count,
SUM(IF(t2.type = 'out', 1, 0)) AS out_count
FROM users AS t1
JOIN referrals AS t2
ON t1.username = t2.author
WHERE t1.website != ''
GROUP BY t1.username,
t1.website
ORDER BY in_count DESC
LIMIT 0, 10
(仅限于将问题与其他查询区分开来)但我不确定如何检查它是否在当月内。
MySQL查询:
{{1}}
感谢所有帮助! :乙
答案 0 :(得分:66)
您需要使用YEAR()
和MONTH()
functions来限制结果。像这样更改查询的WHERE
部分:
WHERE t1.website != ''
AND YEAR(time) = YEAR(NOW())
AND MONTH(time) = MONTH(NOW())
答案 1 :(得分:14)
您可以使用from_unixtime
之类的
date_format(from_unixtime(t2.`time`), '%Y-%m')=date_format(now(), '%Y-%m')
但我认为数据类型integer
不太适合此要求
我认为使用datetime
更合适,在此列上构建索引,这也使过滤更容易,例如
t2.`time`>='2011-01-01' and t2.`time`<'2011-02-01'
或
date_format(t2.`time`, '%Y-%m')=date_format(now(), '%Y-%m')
答案 2 :(得分:2)
这可能比你期望的要简单得多。
SELECT t1.username,
t1.website,
SUM(IF(t2.type = 'in', 1, 0)) AS in_count,
SUM(IF(t2.type = 'out', 1, 0)) AS out_count
FROM users AS t1
JOIN referrals AS t2
ON t1.username = t2.author
WHERE t1.website != ''
AND t2.time >= DATE_SUB( CURRENT_DATE, INTERVAL 1 DAY )
GROUP BY t1.username,
t1.website
ORDER BY in_count DESC
LIMIT 0, 10
答案 3 :(得分:2)
where t2.time >= extract(YEAR_MONTH from CURRENT_DATE)
and t2.time < extract(YEAR_MONTH from CURRENT_DATE + INTERVAL 1 MONTH)
假设t2.time是日期时间类型。如果是整数unix时间戳,则可以使用UNIX_TIMESTAMP()函数转换我们创建的上下日期时间边界。
答案 4 :(得分:0)
为了获得更好的表现( - >使用索引),请在日期列上创建一个索引,并在&#34;之间使用&#34;在你的where子句中。
String hgsv = "BRAF.p:V600E";
String[] tokens = hgsv.split(".");
this.symbol = tokens[0];
String type = tokens[1].split(":")[0];
答案 5 :(得分:-1)
检查MySql中的MONTH函数。
您可以添加MONTH( FROM_UNIXTIME( t2.time ) ) = Month(NOW())
在 fireeyedboy 的评论中获得帮助后编辑。