sql - SQL:选择 max(A), B 但不想分组或聚合 B
问题描述
如果我有一个有多个房间的房子,但我想要最近创建的颜色,我会说:
select house.house_id, house.street_name, max(room.create_date), room.color
from house, room
where house.house_id = room.house_id
and house.house_id = 5
group by house.house_id, house.street_name
但我得到了错误:
列“room.color”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
如果我说 max(room.color),那么当然,它会给我 max(color) 以及 max(create_date),但我想要具有 MAX 创建日期的房间的颜色。
刚刚添加了 street_name 因为我确实需要进行连接,只是试图简化查询以澄清问题..
解决方案
在标准 SQL 中,您可以这样写:
select r.house_id, r.create_date, r..color
from room r
where r.house_id = 5
order by r.create_date desc
offset 0 row fetch first 1 row only;
请注意,该house
表不是必需的。如果您确实需要其中的列,那么您将使用join
/on
语法。
并非所有数据库都支持标准offset
/fetch
子句。您可能需要使用limit
,select top
或其他东西,具体取决于您的数据库。
以上在 SQL Server 中有效,但可能更常见的写法是:
select top (1) r.house_id, r.create_date, r..color
from room r
where r.house_id = 5
order by r.create_date desc;
推荐阅读
- html - 如何将样式应用于 HTML
element?</h1> <div id="body"><p>My question is simple, I just want to know that is there any way to apply CSS style to HTML element. Like the following declaration:</p> <pre><code>title{ col - php - 如何确保 php 语法检查在 Eclipse 中有效
- python - 将 ipython 作为非交互式脚本运行
- r - 在 R 中加载包 fPortfolio 时出现问题
- c# - 省略特定序列化的某些字段
- c++ - Linked List Print() 函数打印字符的ASCII码
- android - 使用 ConstraintLayout 将 ChipGroup 与 ImageView 对齐
- google-bigquery - DataStudio 在 BQ 中的物化视图上生成的查询现在从 approx_count_distinct 函数返回 BYTES 的签名
- reactjs - React Formik Form - 当用户切换表单选项卡时记住字段的值
- azure - ADF 使用复制数据更改接收器中数据类型的列