当点的总和大于数字时,MySQL找到一行

时间:2014-01-16 14:00:11

标签: mysql

我有这样的SQL查询

SELECT *,(p.datetime-u.createtime)/86400 as result 
    FROM tbl_user_points p 
    Inner join tbl_users u ON u.id=p.user_id 
    GROUP BY p.user_id
    HAVING SUM(p.points) > 100 
    order by SUM(p.points) 

我需要找到每个用户到达时的日期时间(表tbl_user_points中的行)。

更多信息这里是表格的图式 tbl_user_points

CREATE TABLE `tbl_user_points` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `action` int(10) unsigned NOT NULL,
  `description` varchar(255) DEFAULT '',
  `points` int(10) NOT NULL DEFAULT '0',
  `datetime` int(10) unsigned NOT NULL,
  `club_id` int(10) unsigned DEFAULT NULL,
  `event_id` int(10) unsigned DEFAULT NULL,
  `location_id` int(10) unsigned DEFAULT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `id_UNIQUE` (`id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='Achieved users points for any actions.';

这里是表格的图式 tbl_users

 CREATE TABLE `tbl_users` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `username` varchar(255) DEFAULT NULL,
   `password` varchar(255) DEFAULT NULL,
   `email` varchar(128) NOT NULL,
   `activkey` varchar(128) NOT NULL DEFAULT '',
   `createtime` int(11) NOT NULL,
   `lastvisit` int(11) NOT NULL,
   `superuser` int(1) NOT NULL DEFAULT '0',
   `status` int(1) NOT NULL DEFAULT '1',
   `first_name` varchar(128) DEFAULT NULL,
   `last_name` varchar(128) DEFAULT NULL,
   `gender` varchar(6) DEFAULT NULL,
   `locale` varchar(45) DEFAULT NULL,
   `service` varchar(45) NOT NULL,
   `service_id` varchar(255) DEFAULT NULL,
   `location` varchar(128) DEFAULT NULL,
   `state` int(3) DEFAULT NULL,
   `photo` varchar(255) DEFAULT NULL,
   `city` varchar(125) DEFAULT NULL,
   `about_me` varchar(255) DEFAULT NULL,
   `user_code` varchar(10) DEFAULT NULL,
   `loyalty_level` varchar(45) DEFAULT 'basic' COMMENT 'Level of loyalty for current user',
   `updatetime` int(11) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `email` (`email`),
   UNIQUE KEY `user_code_UNIQUE` (`user_code`),
   KEY `status` (`status`),
   KEY `superuser` (`superuser`)
 ) ENGINE=InnoDB AUTO_INCREMENT=1033 DEFAULT CHARSET=utf8;

示例输入 tbl_user_points

 id   |  user_id|action|description|points|       datetime
2246      1        1    First visit     5   1383331212
2254      1        2    Second visit    15  1383354853
2255      1        3    Winner          25  1383360231
2256      2        1    First visit     5   1383331202
2257      2        2    Second visit    15  1383354553
2258      2        3    Winner          25  1383360211

tbl_user simple,例如

id=1,createtime=1313000000
id=2,createtime=1313000001

for HAVING SUM(p.points)> 15 输出应该是

user_id   datetime
 1           1383354853  
 2           1383354553

1 个答案:

答案 0 :(得分:0)

使用CASE语法。检查此链接: http://dev.mysql.com/doc/refman/5.0/en/case.html。 您可以使用以下语句来实现它:

Select X, case when y>100 then desired_row  when y<100 then desired_row  end as 'desired_row' from your_table where column=your_condition order by 1

在这里,您需要根据需要的条件或条件来调整select子句。