看了 这个帖子, http://topic.csdn.net/u/20111117/19/d42ebf2b-52bd-46ac-a3ee-043d2ac33853.html 
select p.*,
row_number() over(
partition by substring(CONVERT(varchar(100), log_time,120),1,13)  
order by log_time desc) num_id
from table
where num_id=1
;
意思就是以日期+小时作为分组,组内用时间排序,倒序取第一条记录就是楼主所要的感觉好像是 sqlserver的语句.
我要在mysql 里怎么用啊?也可以是存储过程. 我的表结构为 parval=array(218,222,288,300); 更多, 这里演示只输入几个`id`, `userid`, `parcode`, `parval`, `uptime`
 
1      9090     218        90        2012-08-01 12:02:04
2      9090     218        90        2012-08-01 12:12:04
3      9090     222        70        2012-08-01 12:51:04
4      9090     222        120       2012-08-01 13:02:04
5      9090     222        90        2012-08-01 14:02:04
6      9090     222        90        2012-08-01 15:02:04
7      9090     288        73        2012-08-01 15:02:04
8      9090     218        90        2012-08-01 16:02:04
9      9090     222        90        2012-08-01 17:02:04
10     9090     288        90        2012-08-01 17:02:04 
11     9090     288        90        2012-08-01 18:02:04
12     9090     288        90        2012-08-01 19:02:04 我现在放的数据比较少
现在需要的就是 每个 users 的 parcode 的值 parval 每小时内只出现一次,取最后时间的就可以了如何实现输入 userid = 9090
就把数据按以下方式列出userid =9090 的数据2012-08-01 12点   218=90 ,222=70,288='',300=''
2012-08-01 13点   218='',222=120,288='',300=''
2012-08-01 14点   218='' ,222=90,288='',300=''就这样的格式, 如何写mysql 语句?谢谢

解决方案 »

  1.   

    http://blog.csdn.net/acmain_chm/article/details/4126306分组取前N记录
    经常看到问题,如何取出每组的前N条记录。方便大家参考于是便把常见的几种解法列出于下。 问题:有表 如下,要求取出各班前两名(允许并列第二) Table1 +----+------+------+-----+ | id |SName |ClsNo |Score| +----+------+------+-----+ |  1 |AAAA  |  C1  | 67  | |  2 |...
      

  2.   

    SELECT * FROM ttp3 a WHERE NOT EXISTS(SELECT 1 FROM ttp3 WHERE
    a.`userid`=`userid` AND a.`parcode`=`parcode` AND a.`parval`=a.`parval` AND a.`uptime`>`uptime`
    AND DATE_FORMAT(a.`uptime`,'%Y-%m-%d %h')=DATE_FORMAT(`uptime`,'%Y-%m-%d %h')
    ) ORDER BY a.`userid`,a.`uptime`,a.`parcode`;
      

  3.   

    SELECT * FROM (
        SELECT 
            *,
            DATE(uptime) AS d,
            SUBSTRING(uptime,12,2) as h
        FROM tb
        ORDER BY userid,parcode,parval,uptime DESC
    ) tb2
    GROUP BY userid,parcode,parval,d,h已测试过有效