有一张消费记录表,表名为consume_record
,包含三个字段:
- uid
- consume_type(类型),消费类型有A,B,C,D,E,F 6种
- consume_time(时间)
我想得到某个用户使用A,B,C,D这四种类型的最早的消费记录,SQL语句该怎么写?
我的SQL是这么写的:
SELECT
*
FROM
consume_record
WHERE
uid = 1
AND consume_tpye IN (A , B, C, D)
GROUP BY consume_tpye
ORDER BY consume_time DESC
这样得到的结果不准确,大一学生狗求教育!
更新,忘了加题目的ABCD限制了=w=
用聚集函数:
SELECT uid,
consume_type,
MIN(consume_time)
FROM consume_record
WHERE uid = '1'
AND
consume_type IN ('A','B','C','D')
GROUP BY consume_type;
http://sqlfiddle.com/#!2/baee0/1
不用聚集函数:
SELECT r1.*
FROM consume_record r1
LEFT JOIN
consume_record r2
ON r1.uid = r2.uid
AND
r1.consume_type = r2.consume_type
AND
r1.consume_time > r2.consume_time
WHERE r2.uid IS NULL
AND
r1.uid = "1"
AND
r1.consume_type in ('A','B','C','D')
;
http://sqlfiddle.com/#!2/baee0/3
SELECT
*
FROM
consume_record AS S
WHERE
uid = 1
AND consume_tpye IN (A, B, C, D)
AND S.consume_time >= ALL (
SELECT
consume_time
FROM
consume_record
WHERE
id = 1 AND consume_type IN (A, B, C, D)
);
select uid, consume_type, min(consume_time)
from consume_record r
where r.consume_type in ('A', 'B', 'C', 'D')
and uid = ?
group by uid, consume_type