mysql 根据某字段分组,分组展示是根据某字段倒序第一条数据
时间: 2024-03-10 16:49:42 浏览: 66
可以使用MySQL的GROUP BY和MAX()函数来实现根据某字段分组,并展示某字段倒序第一条数据的需求。具体的SQL语句如下:
```
SELECT *
FROM your_table
WHERE (your_field, your_order_field) IN (
SELECT your_field, MAX(your_order_field)
FROM your_table
GROUP BY your_field
)
```
其中,your_table是你要查询的表名,your_field是你要根据哪个字段分组的字段名,your_order_field是你按照哪个字段倒序排序的字段名。这个SQL语句的意思是先按照your_field字段分组,然后在每个分组内找到your_order_field字段的最大值,最后根据这个最大值来展示每个分组内的数据。
相关问题
主表一条数据对应子表多条数据,子表里有日期字段,主表与子表通过主表id关联,写一条sql,查询主表对应子表数据里日期字段小于当前日期,并且与当前日期时间最近的数据 mysql
以下是一条 MySQL 查询语句,可以实现您的需求:
```mysql
SELECT *
FROM 主表
WHERE EXISTS (
SELECT 1
FROM 子表
WHERE 子表.主表id = 主表.id
AND 子表.日期字段 < NOW()
ORDER BY 子表.日期字段 DESC
LIMIT 1
)
```
这条语句会先查询出主表中所有符合条件的数据,然后对于每一条主表数据,都会检查是否存在一个子表数据满足日期小于当前日期的条件。如果存在,就按照日期字段倒序排序,取第一条数据(即日期最近的数据),并将该主表数据加入结果集合中。
注意,这里使用了 MySQL 中的 NOW() 函数,它会返回当前日期和时间。如果您只需要当前日期,可以将它替换为 CURRENT_DATE()。
mysql 查询人员zjz字段 优先选取 "专职", 专职人员没有在 选取"兼职"
您可以使用如下的 SQL 语句来查询人员 zjz 字段,优先选取 "专职",如果 "专职" 人员不存在,则选取 "兼职" 人员:
```
SELECT *
FROM employees
WHERE zjz = '专职'
ORDER BY zjz DESC
LIMIT 1
UNION
SELECT *
FROM employees
WHERE zjz = '兼职'
ORDER BY zjz DESC
LIMIT 1;
```
这个查询语句会先查询 zjz 字段为 "专职" 的人员,然后按照 zjz 字段进行倒序排序,从而将 "专职" 排在前面。如果有 "专职" 人员,则只取第一条记录。如果没有 "专职" 人员,则查询 zjz 字段为 "兼职" 的人员,按照 zjz 字段进行倒序排序,从而将 "兼职" 排在前面,取第一条记录。
阅读全文