我有一个非常棘手的mysql语句问题。
我有一张具有以下结构的表格。
post_id, date_time, category_id
我希望按date_time
对此表格进行排序,并且还要有一个 true 或 false 布尔值,指示此记录是否为该记录的前10条记录每个类别的月份。
请指导我。谢谢!
答案 0 :(得分:0)
您只需通过date_time desc从tablename oder应用select date_time查询 要么 您可以像在数组中获取所有data_time字段列数据。 并应用子字符串逻辑来获取唯一的日期编号。 您可以根据值对其进行排序 并再次附加剩余部分.. 喜欢 10-11-2011 15:30:46 取String date = substring(0,2) 所以你有10个 和字符串remainingDatepart =(3,长度) 按照日期排序后。 并且您可以在排序日期后附加reminingDatapart字符串。 这是你可以应用它们的逻辑。
答案 1 :(得分:0)
这样的事情应该可以解决问题,我只是在脑海中测试过它。
SELECT
s.*
, CASE WHEN s.rank < 10
THEN TRUE
ELSE FALSE
END AS top10
FROM (
SELECT
t1.post_id, t1.date_time, t1.category_id
,CONCAT(year(t1.date_time), month(t1.date_time)) as yearmonth
,@prevyearmonth:= CONCAT(year(t1.date_time), month(t1.date_time)) as yearmonth
,CASE WHEN (@prevyearmonth = CONCAT(year(t1.date_time), month(t1.date_time)))
THEN @rank:= @rank + 1
ELSE @rank:= 1
END as rank
FROM (SELECT * FROM table1 ORDER BY date_time DESC) t1
CROSS JOIN (SELECT @rank:= 0, @prevyearmonth:= null)
ORDER BY date_time DESC
) s
/* HAVING top10 = TRUE */
ORDER BY s.date_time, s.top10