MySQL与订单左连接日期

MySQL与订单左连接日期,mysql,sql,date,join,left-join,Mysql,Sql,Date,Join,Left Join,我有以下表格: 传感器: id name key code 1 s1 abc 123 2 s2 def 456 3 s3 ghi 789 测量值: id value sensor_id generated_at 1 1.0 1 2013-12-30 06:00:00 2 1.0 1 2013-12-30 06:01:00 3 1.0 1 2013-12-30 06:02:00 4

我有以下表格:

传感器:

id  name  key   code
1   s1    abc   123
2   s2    def   456
3   s3    ghi   789
测量值:

id value sensor_id generated_at
1  1.0   1         2013-12-30 06:00:00
2  1.0   1         2013-12-30 06:01:00
3  1.0   1         2013-12-30 06:02:00
4  3.0   2         2013-12-30 07:00:00
5  3.0   2         2013-12-30 07:01:00
6  3.0   2         2013-12-30 07:05:00
7  5.0   3         2013-12-30 08:02:00
8  5.0   3         2013-12-30 08:03:00
9  5.0   3         2013-12-30 08:11:00
10 5.0   3         2013-12-30 08:15:00
我想做的是使用所有传感器数据生成报告,并包括在时间生成的第一个和最后一个测量值,因此MySQL请求的结果应该如下所示:

id name key code first_value_generated_at last_value_generated_at
1  s1   abc 123  2013-12-30 06:00:00      2013-12-30 06:02:00
2  s2   def 456  2013-12-30 07:00:00      2013-12-30 07:05:00
3  s3   ghi 789  2013-12-30 08:02:00      2013-12-30 08:15:00

非常感谢您的帮助,谢谢。

我希望这对您有用

select *
    ,(select min(generated_at) from measurements as a where a.sensor_id =s.id) as first_value_generated_at 
    ,(select max(generated_at) from measurements as b where b.sensor_id =s.id) as last_value_generated_at
 from sensors as s

我不认为这里确实需要
左连接
(只有在
传感器.id
多于或少于
测量.sensor\u id
的情况下)SQL查询如下:

SELECT
    s.id,
    s.name,
    s.key,
    s.code,
    m.first_value_generated_at,
    m.last_value_generated_at
FROM sensors s JOIN 
   (SELECT
      sensor_id,
      MIN(generated_at) as first_value_generated_at,
      MAX(generated_at) as last_value_generated_at
    FROM
      measurements
    GROUP BY
      sensor_id
   ) m ON s.id = m.sensor_id
ORDER BY
    s.id

也许这可以做到-嵌套选择

        select sensors.id, sensors.name, sensors.key, sensors.code,
     ( select generated_at from measurements order by time asc limit 1 )
 as first_value_generated_at,
     ( select generated_at  from measurements order by time desc limit 1 )
 as last_value_generated_at from sensors

尝试此查询,它将生成您所需的确切输出

    select s.id,s.name,s.key,s.code,min(m.generated_at) first_vaue_generated_at,max(m.generated_at) last_value_generated_at
      from sensors s
 LEFT JOIN measurements m ON (s.id = m.sensor_id)
  group by 1,2,3,4;
试试这个,会有用的

select s.id,s.name,s.key,s.code,m.generated_at as first_value_generated_at,ml.generated_at as last_value_generated_at from sensors as s,measurements as mf,measurements as ml where s.id = mf.sessor_id and s.id = ml.sensor_id and mf.generated_at < ml.generated_at group by mf.sensor_id  
选择s.id、s.name、s.key、s.code、m.generated_at as first_value_generated_at、ml.generated_at as last_value_generated_at from sensors as s、measurements as ml其中s.id=mf.sessor_id和s.id=ml.sensor_id和mf.generated_at
我发现
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解使用测量值中的“near”的正确语法
只需从
MAX(m.generated\u at)中取出逗号作为最后一个\u值\u generated\u at,
,查询应work@Abhik查克拉波蒂:谢谢:)+1的答案!!因为它可以处理很多用途,比如在join上使用min()max()来取消字段顺序。