为了账号安全,请及时绑定邮箱和手机立即绑定

请问怎么取出每个类别(category_id)产品的最近添加的(goods_addtime)三条数?

请问怎么取出每个类别(category_id)产品的最近添加的(goods_addtime)三条数?

C++ C
慕码人2483693 2022-05-13 20:11:13
若表结构如下:create table goods(goods_id int primary key,category_id int,goods_name varchar(20),goods_addtime int unsigned)engine myisam charset utf8;
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

首先你这个表里有一个小问题,你的goods_addtime这个字段最好使用time型。
然后你的这个需求可以这么写:
SELECT A1.*
FROM goods AS A1
INNER JOIN (SELECT A.category_id,A.goods_addtime
FROM goods AS A
LEFT JOIN goods AS B
ON A.category_id = B.category_id
AND A.goods_addtime <= B.goods_addtime
GROUP BY A.category_id,A.goods_addtime
HAVING COUNT(B.goods_addtime) <= 3
) AS B1
ON A1.category_id = B1.category_id
AND A1.goods_addtime = B1.goods_addtime
ORDER BY A1.category_id,A1.goods_addtime DESC
我这个语句也有一点问题。如果你这个goods_addtime字段坚持要用int的话,那我这个语句没法返回正确结果。但是要是改成time的话是可以返回的。

查看完整回答
反对 回复 2022-05-16
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

SELECT * from (
SELECT t.*,@num := if(@category_id = t.category_id, @num + 1,1) as cal_rank,@category_id:=t.category_id from
(SELECT * from goods ORDER BY category_id asc ,goods_addtime desc) t,
(SELECT @num := 0) t1,(SELECT @category_id := 0) t2
) t3 where t3. cal_rank <4

查看完整回答
反对 回复 2022-05-16
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

select * from goods ordery goods_addtime desc limit 3;

查看完整回答
反对 回复 2022-05-16
  • 3 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信