mysql代码,表shengzici_notebook有3个字段:idno,menu_idno和addtime,其中addtime是时间类型字段。idno是唯一标识,menu_idno是可以重复的。要求对表按menu_idno进行分组,addtime越新,记录排序在最前
时间: 2024-09-23 08:04:15 浏览: 58
MYSQL替换时间(年月日)字段时分秒不变实例解析
在MySQL中,你可以使用`GROUP BY`和`ORDER BY`语句结合来满足这个需求。首先,你需要按照`menu_idno`字段进行分组,然后对每个分组内的`addtime`字段进行降序排序,这样最新的记录就会排在前面。以下是相应的SQL查询语句:
```sql
SELECT idno, menu_idno, MAX(addtime) as max_addtime
FROM shengzici_notebook
GROUP BY menu_idno
ORDER BY max_addtime DESC;
```
这里,`MAX(addtime)`函数用于获取每个`menu_idno`下的最新添加时间,然后通过`ORDER BY max_addtime DESC`将结果按添加时间降序排列。
如果你想得到所有记录,并保持原有的行顺序,可以稍微修改一下查询,使用窗口函数`ROW_NUMBER()`:
```sql
SELECT *
FROM (
SELECT idno, menu_idno, addtime,
ROW_NUMBER() OVER (PARTITION BY menu_idno ORDER BY addtime DESC) as row_num
FROM shengzici_notebook
) ranked_records
WHERE row_num = 1;
```
这会返回每个`menu_idno`中最新的记录(按添加时间)。如果有多条添加时间相同的记录,则它们之间的原始顺序将会保留。
阅读全文