php - 选择范围内最大值的行

标签 php mysql sql

我有以下数据:

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  1 |       1 | 2013-11-01 23:59:59 |    12 |
|  2 |       1 | 2013-11-02 23:59:59 |    15 |
|  3 |       1 | 2013-11-03 23:59:59 |    18 |
|  4 |       1 | 2013-11-04 23:59:59 |    29 |
|  5 |       1 | 2013-11-05 23:59:59 |    38 |
|  6 |       1 | 2013-11-05 12:59:59 |    40 |
|  7 |       1 | 2013-11-06 23:59:59 |    45 |
|  8 |       1 | 2013-11-07 23:59:59 |    49 |
|  9 |       1 | 2013-11-08 23:59:59 |    52 |
| 10 |       2 | 2013-11-04 23:59:59 |    25 |
| 11 |       2 | 2013-11-05 21:59:59 |    42 |
| 12 |       2 | 2013-11-06 23:59:59 |    60 |
| 13 |       2 | 2013-11-07 23:59:59 |    75 |
| 14 |       2 | 2013-11-08 23:59:59 |    86 |
| 15 |       2 | 2013-11-09 23:59:59 |    90 |
| 16 |       2 | 2013-11-10 23:59:59 |    92 |
| 17 |       2 | 2013-11-11 23:42:59 |    98 |
+----+---------+---------------------+-------+

我会度过一天,并希望获得给定日期中时间最长的行,或者如果这一天没有该站点的记录,则获取过去最后可用的行。

例如2013-11-01

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  1 |       1 | 2013-11-01 23:59:59 |    12 |
+----+---------+---------------------+-------+

2013-11-05

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  5 |       1 | 2013-11-05 23:59:59 |    38 |
| 11 |       2 | 2013-11-05 21:59:59 |    42 |
+----+---------+---------------------+-------+

对于 2013-11-10

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  9 |       1 | 2013-11-08 23:59:59 |    52 |
| 16 |       2 | 2013-11-10 23:59:59 |    92 |
+----+---------+---------------------+-------+

提前致谢。

最佳答案

你可以试试这个:

SELECT a.id,a.site_id,b.maxDate,a.views
FROM table1 a
INNER JOIN (
    SELECT  site_id ,MAX(datetime) as maxDate
    FROM table1
    WHERE datetime < DATEYOUWANTTOSEE + INTERVAL 1 DAY
    GROUP BY site_id
) b ON a.site_id = b.site_id AND a.datetime = b.maxDate 

内部查询将为您获取每个 site_id 的 MAX(datetime)。然后将它与您的表结合起来以获取其余信息。

sqlfiddle demo

关于php - 选择范围内最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190089/

相关文章:

php无法连接到mysql

mysql - 将一对多转换为行

mysql - 如何在MySQL中填写两个日期之间的所有时间段?

MySql - 计数和分组存在问题

sql - 如何在over函数中使用partition by和order by?

sql - 在 SQL 表上创建统计信息之前检查是否存在具有相同列的统计信息

php:获取IP地址

php - 我在我的页面上得到一个 "�",PhpMyAdmin 显示 "é"不知道如何修复它

php - wordpress 中的 bloginfo ('stylesheet_url' 问题)

mysql - 创建表时出现 MARIADB 错误 1064 (42000)