select a.fd_meter_joint as 表号,a.fzdate as 最后一次时间,a.data as 最后一次数据,b.fzdate as 倒数第二次时间,b.data as 倒数第二次数据 from (
select * from freezedata as tem where fzdate=(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint)
) as a left join (
select * from freezedata as tem where fzdate=(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint and fzdate<>(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint))
) as b on a.fd_meter_joint=b.fd_meter_joint

解决方案 »

  1.   

    select a.表号,a.最后一次读数,b.倒数第二次读数
    from(
    select 表号=fd_meter_joint,最后一次读数=data from freezedata
    where joint=(select max(joint) from freezedata where fzdate=(select max(fzdate) from freezedata))
    ) a inner join b(
    select 表号=fd_meter_joint,倒数第二次读数=data from freezedata
    where joint=(select max(joint) from freezedata where fzdate=(select max(fzdate) from freezedata where fzdate<>(select max(fzdate) from freezedata)))
    ) on a.表号=b.表号
      

  2.   

    --说明一下,用序号是为了保证日期相同时,取最大序号的数据.如果你的记录是按序号的,即最新的记录的序号最大,可以直接用:select a.表号,a.最后一次读数,b.倒数第二次读数
    from(
    select 表号=fd_meter_joint,最后一次读数=data from freezedata
    where joint=(select max(joint) from freezedata)
    ) a inner join b(
    select 表号=fd_meter_joint,倒数第二次读数=data from freezedata
    where joint=(select max(joint) from freezedata where joint not in(select max(joint) from freezedata))
    ) on a.表号=b.表号
      

  3.   

    --上面的少考虑了表号的因素,改一下:--方法1
    select a.表号,a.最后一次读数,b.倒数第二次读数
    from(
    select 表号=fd_meter_joint,最后一次读数=data from freezedata
    where joint=(select max(joint) from freezedata where fd_meter_joint=a.fd_meter_joint and fzdate=(select max(fzdate) from freezedata where fd_meter_joint=a.fd_meter_joint))
    ) a inner join b(
    select 表号=fd_meter_joint,倒数第二次读数=data from freezedata
    where joint=(select max(joint) from freezedata where fd_meter_joint=b.fd_meter_joint and fzdate=(select max(fzdate) from freezedata where fd_meter_joint=b.fd_meter_joint and fzdate<>(select max(fzdate) from freezedata where fd_meter_joint=b.fd_meter_joint)))
    ) on a.表号=b.表号
    方法2.
    select a.表号,a.最后一次读数,b.倒数第二次读数
    from(
    select 表号=fd_meter_joint,最后一次读数=data from freezedata
    where joint=(select max(joint) from freezedata where fd_meter_joint=a.fd_meter_joint)
    ) a inner join b(
    select 表号=fd_meter_joint,倒数第二次读数=data from freezedata
    where joint=(select max(joint) from freezedata where fd_meter_joint=b.fd_meter_joint and joint not in(select max(joint) from freezedata where fd_meter_joint=a.fd_meter_joint))
    ) on a.表号=b.表号
      

  4.   

    要用fzdate来比较时间,不能用max(joint),还有,在其他数据库中,如oracle,db2等中是否也能用inner join ,left join 或是right join
      

  5.   

    select a.fd_meter_joint as 表号,a.fzdate as 最后一次时间,a.data as 最后一次数据,b.fzdate as 倒数第二次时间,b.data as 倒数第二次数据 from (
    select * from freezedata as tem where fzdate=(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint)
    ) as a left join (
    select * from freezedata as tem where fzdate=(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint and fzdate<>(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint))
    ) as b on a.fd_meter_joint=b.fd_meter_joint谁能把这个语句中的left join去掉,改成表连接,在其他数据库中不支持这个关键字
      

  6.   

    select a.fd_meter_joint as 表号,a.fzdate as 最后一次时间,a.data as 最后一次数据,b.fzdate as 倒数第二次时间,b.data as 倒数第二次数据 from (
    select * from freezedata as tem where fzdate=(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint)
    ) as a left join (
    select * from freezedata as tem where fzdate=(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint and fzdate<>(select max(fzdate) from freezedata where fd_meter_joint=tem.fd_meter_joint))
    ) as b on a.fd_meter_joint=b.fd_meter_joint谁能把这个语句中的left join去掉,改成表连接,在其他数据库中不支持这个关键字