Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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_Sql - Fatal编程技术网

Mysql 选择具有最新日期的值,并按其他列分组

Mysql 选择具有最新日期的值,并按其他列分组,mysql,sql,Mysql,Sql,Myquery正在获取我需要的精确结果,但当数据超过1000行时,它需要很长时间。我需要使它高效 Select `id`, `uid`, case when left_leg > right_leg then left_leg else right_leg end as Max_leg,`date` from ( SELECT * FROM network t2 where id in (select id from (select id,uid,`date` from (SELECT *

Myquery正在获取我需要的精确结果,但当数据超过1000行时,它需要很长时间。我需要使它高效

Select `id`, `uid`, case when left_leg > right_leg then left_leg
else right_leg end as Max_leg,`date` from
(
SELECT * FROM network t2 where id in (select id from
(select id,uid,`date` from (SELECT * FROM network order by uid,
`date` desc) t4 group by uid) t3) and
(left_leg>=500 or right_leg>=500))t1
要根据每个uid的最新日期从网络中拾取数据吗 想要选择左腿>=500或右腿>=500的数据 只想选择两条腿中较大的一条腿(左或右)

整个查询可能有一些问题,但核心问题是此代码

SELECT * FROM network t2 where id in (select id from
(select id,uid,`date` from (SELECT * FROM network order by uid,
`date` desc) t4 group by uid) t3)
我想改进此查询,因为当数据增长时,它获取结果的速度非常慢。

在(uid,date)上添加索引:

试着做一些类似的事情:

SELECT n.id, n.uid, greatest( n.right_leg, n.left_leg ) as max_leg, n.date
FROM
  ( SELECT uid,max(date) as latest FROM network
    WHERE right_leg>=500 OR left_leg >=500
    GROUP BY uid
  ) ng
JOIN network n ON n.uid = ng.uid AND n.date = ng.latest
在(uid,日期)上添加索引:

试着做一些类似的事情:

SELECT n.id, n.uid, greatest( n.right_leg, n.left_leg ) as max_leg, n.date
FROM
  ( SELECT uid,max(date) as latest FROM network
    WHERE right_leg>=500 OR left_leg >=500
    GROUP BY uid
  ) ng
JOIN network n ON n.uid = ng.uid AND n.date = ng.latest

根据您的描述:

  • 首先查找每个uid的最大日期
  • 然后找到关联ID
  • 根据腿部值进行过滤
例如:

SELECT id, uid, GREATEST(left_leg, right_leg) as max_leg
  FROM network
  WHERE (uid, `date`) IN (SELECT uid, MAX(`date`)
                            FROM network
                            GROUP BY uid)
    AND (left_leg > 500 or right_leg > 500)

请注意,这意味着如果uid的最新日期没有大于500的段,则记录不会显示在结果中。如果您想要legs>500的最新记录,则必须移入leg筛选器。

获取您的描述:

  • 首先查找每个uid的最大日期
  • 然后找到关联ID
  • 根据腿部值进行过滤
例如:

SELECT id, uid, GREATEST(left_leg, right_leg) as max_leg
  FROM network
  WHERE (uid, `date`) IN (SELECT uid, MAX(`date`)
                            FROM network
                            GROUP BY uid)
    AND (left_leg > 500 or right_leg > 500)

请注意,这意味着如果uid的最新日期没有大于500的段,则记录不会显示在结果中。如果希望最新记录的legs>500,则必须移入leg筛选器。

是否可以使用真实数据发布解释?请参阅联接,然后查看最大值。是否可以使用真实数据发布解释?请参阅联接,然后查看最大值。