免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3119 | 回复: 12
打印 上一主题 下一主题

请教一个SQL问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-18 16:28 |只看该作者 |倒序浏览
这个表用来记录连接数(connections),每半个小时统计一次并添加为新的记录
现在要统计每天最高连接数MAX(`connections`),同时要知道发生的时间(mktime,要具体的时间如 2008-06-18 19:46:17)
请问这个sql怎么写?
  1. +----+------------+---------------------+
  2. | id | connections | mktime              |
  3. +----+------------+---------------------+
  4. | 47 |         13 | 2008-06-18 00:00:01 |
  5. | 48 |         11 | 2008-06-18 00:30:01 |
  6. | 49 |         10 | 2008-06-18 01:00:01 |
  7. | 50 |          8 | 2008-06-18 01:30:01 |
  8. | 51 |          7 | 2008-06-18 02:00:02 |
  9. | 52 |          5 | 2008-06-18 02:30:01 |
  10. | 53 |          5 | 2008-06-18 03:00:01 |
  11. | 54 |          5 | 2008-06-18 03:30:01 |
  12. ……
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-06-18 17:12 |只看该作者
order by connections desc limit 1

论坛徽章:
0
3 [报告]
发表于 2008-06-18 18:09 |只看该作者
-_-
是要每天的

论坛徽章:
0
4 [报告]
发表于 2008-06-18 18:17 |只看该作者
需要的数据是每天的最高记录
以日期为单位group,但是又需要精确的发生时间
希望得到的结果是
+----+-------------+---------------------+
| id | connections | mktime |
+----+-------------+---------------------+
| 27 | 17 | 2008-06-16 19:00:01 |
| 38 | 21 | 2008-06-17 19:30:01 |
| 49 | 18 | 2008-06-18 18:30:01 |
……

论坛徽章:
0
5 [报告]
发表于 2008-06-19 07:58 |只看该作者
select table_name.*
from table_name, (select max(connections) as max_connections,substring(mktime,1,10) as mk_date from table_name group by mk_date) as temp_table
where table_name.connections=max_connections and substring(mktime,1,10)=mk_date

试试吧,或许能用,不过效率不会太高.

[ 本帖最后由 wildlily980 于 2008-6-19 07:59 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-06-19 09:13 |只看该作者
这种情况下,如果把mktime做时间戳来存储,就容易得多了.

论坛徽章:
0
7 [报告]
发表于 2008-06-19 10:25 |只看该作者
原帖由 wildlily980 于 2008-6-19 07:58 发表
select table_name.*
from table_name, (select max(connections) as max_connections,substring(mktime,1,10) as mk_date from table_name group by mk_date) as temp_table
where table_name.connections ...


可以用,我也想到用临时表,但希望有更高效率的办法

不过还是谢谢你啦 :)

论坛徽章:
0
8 [报告]
发表于 2008-06-19 10:26 |只看该作者
原帖由 nogroup 于 2008-6-19 09:13 发表
这种情况下,如果把mktime做时间戳来存储,就容易得多了.


如果是时间戳应该怎么做呢? 请指教

论坛徽章:
0
9 [报告]
发表于 2008-06-19 13:04 |只看该作者
如果对效率要求比较高的话,不如再开个字段,只保存日期。

论坛徽章:
0
10 [报告]
发表于 2008-06-19 15:52 |只看该作者
存为时间戳后,开始时间为 $start = mktime(0,0,0,6,18,200;
结束时间为$end = $start + 86400;
$sql = "SELECT connections,mktime FROM tablename WHERE mktime>=$start and mktime<$end order by connections desc limit 1";
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP