SELECT
avg(con_hits) as avg_hits
FROM
content
WHERE
con_type = 1
AND con_posttime < $twelve_hrs_ago
AND con_refresh = 0
ORDER BY
con_posttime DESC
LIMIT 100
我希望它转到至少12小时前发布的第一条记录(由具有合适时间戳的$twelve_hrs_ago
变量表示),并取con_hits
列的平均值,接下来的100条记录。在我的示例中,它忽略LIMIT
,并取表中每条记录的平均值。
有没有办法绕过它?
答案 0 :(得分:12)
LIMIT
后, AVG
将应用于结果集。您可以使用子选择执行您想要的操作:
SELECT avg(con_hits) as avg_hits
FROM (
SELECT con_hits
FROM content
WHERE
con_type = 1
AND con_posttime < $twelve_hrs_ago
AND con_refresh = 0
ORDER BY con_posttime DESC
LIMIT 100
) x;
您也可以使用数据库计算时间偏移量。将以上$twelve_hrs_ago
替换为:
date_add(now(), interval -12 hour)
答案 1 :(得分:1)
怎么样:
SELECT avg(con_hits) as avg_hits FROM (
SELECT con_hits FROM content
WHERE con_type = 1 AND con_posttime < $twelve_hrs_ago AND con_refresh = 0
ORDER BY con_posttime DESC
LIMIT 100
)
Mysql支持子查询,所以这可能会为你做。