【发布时间】:2023-04-01 03:28:02
【问题描述】:
我认为从 SQL 中的子查询中选择值只会从该子集中产生值,直到我在代码中发现一个非常讨厌的错误。这是我的问题的一个例子。
-
我正在按日期选择包含最新(最大)函数的行。这会正确返回 4 行,其中包含每个函数的最新签入。
select *, max(date) from cm where file_id == 5933 group by function_id;
-
当仅从上面的子集中选择值时,它返回以前日期的函数值,即不属于上面子集中的行。您可以在下面看到日期早于第一个子集的结果。
select temp.function_id, temp.date, temp.value from (select *, max(date) from cm where file_id 5933 group by function_id) as temp;
我做错了什么?对子查询执行的选择不应该只返回这些子查询的可能结果吗?
【问题讨论】:
-
我认为问题在于您按 function_id 对行集进行分组,同时保留行的其他字段。尝试添加您的 GROUP BY 的其他非聚合(最大/计数/最小)字段。如果它们是不必要的,请不要将它们保留在您的 SELECT 语句中。
标签: sql sqlite subquery subset