带聚合函数的子查询
Sub query with aggregate function
我无法获取正确的记录。我的位置 table 记录了一件设备的位置历史。因此,最新的 date_moved 将是其当前位置。位置 table 当前包含 2258 条记录(“state_tag” 是 FK)。在我的装备table中,我有2050件装备,每件装备都有一个唯一的“state_tag”编号(PK)。所以,我想要的是查询位置table以获取所有设备的当前位置(即MAX(date_moved)。然后查询应该return 2050条记录。
按照之前 post 的示例,我尝试了以下查询:
SELECT * FROM its_locations WHERE date_moved in (SELECT MAX(date_moved) FROM its_locations GROUP BY state_tag);
但是,查询 return 2257 条记录,而它应该 return 2050 条记录。显然,我的查询完全按照写的那样进行,但不是我们想要的(笑)。
我还尝试了以下查询,它给了我 2050 条记录,但只 return 编辑了每个组中的第一条记录,并将该组的最大日期插入到该记录中,该记录很可能不是当前记录地点。
SELECT state_tag
, MAX(date_moved) AS "Date Moved"
, building
, room
, staff
, comments
FROM its_locations
GROUP BY state_tag;
请帮我正确查询。
非常感谢。
克里斯
这是您的查询:
SELECT *
FROM its_locations
WHERE date_moved in (SELECT MAX(date_moved) FROM its_locations GROUP BY state_tag)
子查询计算所有位置的最大值 date_moved
。然后它 returns 任何 具有这些日期的位置。因此,两个位置可能在同一日期移动,一个是最大日期,并且两个位置都被返回。
你要的是关联子查询,不是group by
:
SELECT l.*
FROM its_locations l
WHERE date_moved = (SELECT MAX(l2.date_moved)
FROM its_locations l2
WHERE l2.state_tag = l.state_tag
);
如果原始 table 有重复项,您可能仍会得到 2,050 多行。但这可能会解决你的问题。
我无法获取正确的记录。我的位置 table 记录了一件设备的位置历史。因此,最新的 date_moved 将是其当前位置。位置 table 当前包含 2258 条记录(“state_tag” 是 FK)。在我的装备table中,我有2050件装备,每件装备都有一个唯一的“state_tag”编号(PK)。所以,我想要的是查询位置table以获取所有设备的当前位置(即MAX(date_moved)。然后查询应该return 2050条记录。
按照之前 post 的示例,我尝试了以下查询:
SELECT * FROM its_locations WHERE date_moved in (SELECT MAX(date_moved) FROM its_locations GROUP BY state_tag);
但是,查询 return 2257 条记录,而它应该 return 2050 条记录。显然,我的查询完全按照写的那样进行,但不是我们想要的(笑)。
我还尝试了以下查询,它给了我 2050 条记录,但只 return 编辑了每个组中的第一条记录,并将该组的最大日期插入到该记录中,该记录很可能不是当前记录地点。
SELECT state_tag
, MAX(date_moved) AS "Date Moved"
, building
, room
, staff
, comments
FROM its_locations
GROUP BY state_tag;
请帮我正确查询。
非常感谢。
克里斯
这是您的查询:
SELECT *
FROM its_locations
WHERE date_moved in (SELECT MAX(date_moved) FROM its_locations GROUP BY state_tag)
子查询计算所有位置的最大值 date_moved
。然后它 returns 任何 具有这些日期的位置。因此,两个位置可能在同一日期移动,一个是最大日期,并且两个位置都被返回。
你要的是关联子查询,不是group by
:
SELECT l.*
FROM its_locations l
WHERE date_moved = (SELECT MAX(l2.date_moved)
FROM its_locations l2
WHERE l2.state_tag = l.state_tag
);
如果原始 table 有重复项,您可能仍会得到 2,050 多行。但这可能会解决你的问题。