4
记录的最小和最大日期我有3个表:查找跨多个表
file_list => list of all files on web server
stats_web => number of pageviews from public web
stats_reg => number of pageviews from "registered users"
我有架构和http://sqlfiddle.com/#!2/98c6a/1/0
我试图计算日期一些示例数据,一个文件首先被公众或注册用户击中。
当前SQL是这样的:
SELECT
list.path,
list.mod_date,
IF(MIN(ifnull(web.hit_date, 0000-00-00)) < MIN(ifnull(reg.hit_date, 0000-00-00)), MIN(ifnull(web.hit_date, 0000-00-00)), MIN(ifnull(reg.hit_date, 0000-00-00))) AS 'min_date',
IF(MAX(ifnull(web.hit_date, 0000-00-00)) > MAX(ifnull(reg.hit_date, 0000-00-00)), MAX(ifnull(web.hit_date, 0000-00-00)), MAX(ifnull(reg.hit_date, 0000-00-00))) AS 'max_date',
SUM(ifnull(web.pages, 0)) + SUM(ifnull(reg.pages, 0)) AS 'page_views'
FROM
file_list list
LEFT JOIN
stats_web web ON list.path = web.path
LEFT JOIN
stats_reg reg ON list.path = reg.path
WHERE
list.path LIKE '/web/htdocs/%'
GROUP BY list.path;
的问题是,如果一个记录仅出现在统计数据表中的一个最小日期始终为0 这是因为IFNULL(中)在MIN和MAX,但如果我不使用ifnull(),则最小和最大日期都会返回NULL。
谢谢dasblinkenlight这个工程很好,但它已经出现了第二个问题。那就是说,如果条目只存在于file_list表中,那么你会得到'9956'作为min_date。 – StefWill 2012-07-10 06:04:56