mysql正在尝试仅选择最新的时间戳
我正在尝试联接两个表,并仅选择最新的时间戳以及与该最新时间戳关联的字段值 数据表: 设备计数mysql正在尝试仅选择最新的时间戳,mysql,join,timestamp,greatest-n-per-group,Mysql,Join,Timestamp,Greatest N Per Group,我正在尝试联接两个表,并仅选择最新的时间戳以及与该最新时间戳关联的字段值 数据表: 设备计数 id device_name platform version timestamp 1 abc 123 x 2013-12-30 2 abc 123 y 2014-01-01 3 def 345 x
id device_name platform version timestamp
1 abc 123 x 2013-12-30
2 abc 123 y 2014-01-01
3 def 345 x 2013-12-30
设备列表
id device_name Network Division Market
2657 def a f d
2656 abc a b c
期望的结果应该是
device_name platform version network division market timestamp
abc 123 y a b c 2014-01-01
def 345 x a f d 2013-12-30
我使用了以下查询,但没有得到正确的结果
SELECT
device_count.device_name,
device_count.platform,
device_count.version,
Max(device_count.`timestamp`),
device_list.Network,
device_list.Division,
device_list.Market
FROM
device_count
INNER JOIN device_list ON device_count.device_name = device_list.Device_Name
GROUP BY
device_count.device_name,
device_count.platform,
device_count.version,
device_list.Network,
device_list.Division,
device_list.Market
结果是
device_name platform version network division market timestamp
abc 123 x a b c 2013-12-30
abc 123 y a b c 2014-01-01
def 345 x a f d 2013-12-30
第一条记录不应包括在内。我只需要最新时间戳记录id 2的版本和平台值,请尝试子查询:
SELECT
device_count.device_name,
device_count.platform,
device_count.version,
Max(device_count.`timestamp`),
device_list.Network,
device_list.Division,
device_list.Market
FROM
device_count DC
INNER JOIN device_list ON device_count.device_name = device_list.Device_Name
inner join
(select device_name, max(timestamp) timestamp
from device_count
group by device_name) as DC on DC.timestamp = device_count.timestamp and DC.device_name=device_count.device_name
一种方法是匹配子选择:
SELECT
device_count.device_name,
device_count.platform,
device_count.version,
device_count.`timestamp`,
device_list.Network,
device_list.Division,
device_list.Market
FROM
device_count
INNER JOIN
device_list
ON device_count.device_name = device_list.Device_Name
WHERE device_count.`timestamp` = (
SELECT MAX(dc2.`timestamp`)
FROM
device_count AS dc2
WHERE
dc2.device_name = device_count.device_name
)
您正在按版本和网络号进行分组,因此您将获得输出中的每一个。我尝试只使用“按设备名称分组”,并获得了正确的最新时间戳,但版本不正确。我从记录1获得版本x,从记录2获得时间戳,而我只需要记录2和3I编辑查询,并将其从GROUPBY更改为子查询。试试看。我尝试了子查询,但由于未知列device\u count.device\u name,子查询无法工作。我厌倦了把它拼凑在一起,现在得到子查询返回超过1行。我做了另一次编辑,这一次用一个额外的内部连接来取代WHERE,该子查询聚合具有最高时间戳的设备名称。我在SQL Server上测试了这个,它可能只在mysql上工作。我仍然有同样的问题。“字段列表”中的未知列“设备计数。设备名称”。似乎在from语句中将表声明为DC导致了问题。但是,这在实际数据集上确实有效,需要7分钟才能完成。设备列表包含约2500条记录,设备计数包含约40000条记录。有什么方法可以提高性能吗?两个表中的设备名称都有索引吗?