Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql正在尝试仅选择最新的时间戳_Mysql_Join_Timestamp_Greatest N Per Group - Fatal编程技术网

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条记录。有什么方法可以提高性能吗?两个表中的设备名称都有索引吗?