我有两个表,一个是项目目录,另一个包含这些项目的历史记录。MYSQL,返回单行JOIN中的第一行和最后一行
我想返回与项目表连接的时间段内最早和最近的历史记录行的值,使每个项目包含这两个提到的值的一行。
表结构如下:
items
-----
item_id, item_title
hist
-------
hist_id, hist_item_id (corresponds to items.item_id), hist_value, hist_time (stores Unix timestamp)
我已经创建了一个SQL捣鼓一些示例数据,以帮助你,http://www.sqlfiddle.com/#!2/c78363/3
作为一个最终的结果,我想看到这样返回的行,这用我的小提琴示例数据将是1420291000和1420294000之间的时间段:
items.item_id items.item_title history_earliest history_latest
1 ABC 1 5
2 XYZ 1 9
目前我运行一个查询对项目返回我所有的项目,然后遍历PHP中的结果,然后运行两个查询给我最早的价值,然后另一个最新的价值,所以我相信有很大的效率节省,但我没有一条线索从哪里开始!
在此先感谢
这不会实现期望的输出。我试图实现的是在定义的时间段内为项目中的每一行获取一行返回的两个hist_value。上面给出的只是给了我最早的时间戳和最新的时间戳。 – user887515
调整您的查询,这给出了所需的输出。然而,我不熟悉MIN和MAX - 我认为这样做是为了返回hist_value的最低值和返回结果中hist_value的最高值,或者这只是基于结果的顺序?最新值可能低于最早值。这产生正确的输出。 SELECT item_id,item_title,MIN(hist_value),MAX(hist_value)FROM(items JOIN hist ON items.item_id = hist.hist_item_id)WHERE hist.hist_time> = 1420291000 AND hist.hist_time <= 1420294000 GROUP BY item_id – user887515
@ user887515'MIN (hist_value)'返回'hist_value'字段中的最小值;它与'hist_time'字段无关。所以它不会产生你需要的结果,除非这些值总是在时间上不降低。 – abl