一个表名: 会员列表ID   名称
1    张三
2    李四
3    王五
第二个表 :上网记录ID    名称   开始上网时间         上网时长
1     张三  2014-01-01 16:30:00   10
2     李四  2014-01-02 16:40:00   20
3     张三  2014-01-03 16:30:00   30
4     李四  2014-01-04 16:40:00   40想找出每个会员的最后上网时间记录
会员最后上网记录
名称   开始上网时间         上网时长
张三  2014-01-03 16:30:00   30
李四  2014-01-04 16:40:00   40
王五  null                 null

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :DBA_HuangZJ(發糞塗牆)
    -- Date    :2014-08-08 16:36:52
    -- Version:
    --      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
    -- May 14 2014 18:34:29 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
    --
    ----------------------------------------------------------------
    --> 测试数据:[上网记录]
    if object_id('[上网记录]') is not null drop table [上网记录]
    go 
    create table [上网记录]([ID] int,[名称] varchar(4),[开始上网时间] datetime,[上网时长] int)
    insert [上网记录]
    select 1,'张三','2014-01-01 16:30:00',10 union all
    select 2,'李四','2014-01-02 16:40:00',20 union all
    select 3,'张三','2014-01-03 16:30:00',30 union all
    select 4,'李四','2014-01-04 16:40:00',40
    --> 测试数据:[会员列表]
    if object_id('[会员列表]') is not null drop table [会员列表]
    go 
    create table [会员列表]([ID] int,[名称] varchar(4))
    insert [会员列表]
    select 1,'张三' union all
    select 2,'李四' union all
    select 3,'王五'
    --------------开始查询--------------------------select * 
    from [会员列表] a LEFT JOIN (
    select 名称,MAX(DATEADD(HOUR,上网时长,开始上网时间))最后上网时间
    from [上网记录]
    GROUP BY 名称)b ON a.名称=b.名称
    ----------------结果----------------------------
    /* 
    ID          名称   名称   最后上网时间
    ----------- ---- ---- -----------------------
    1           张三   张三   2014-01-04 22:30:00.000
    2           李四   李四   2014-01-06 08:40:00.000
    3           王五   NULL NULL
    */
      

  2.   


    select a.名称,b.开始上网时间,b.上网时长
    from 会员列表 a 
    join (select * from 上网记录 a
    where not exists( select 1 from 上网记录 where 名称=a.名称
    and 开始上网时间>a.开始上网时间 )) b 
    on a.名称=b.名称
      

  3.   


    SELECT 名称 FROM 会员列表 AS a
    LEFT JOIN (
    SELECT 名称,MAX(开始上网时间) AS 最后上网时间 FROM 上网记录 GROUP BY 名称
    ) AS b
    ON a.ID = b.ID
      

  4.   

    select a.名称,c.开始上网时间,c.上网时长 from [会员列表] a left join ( select * from [上网记录] b where 开始上网时间= (select max(开始上网时间) from [上网记录] where 名称=b.名称) )c on a.名称=c.名称
      

  5.   

    all of the above is right
      

  6.   

    都是SQL的高手。
      

  7.   

    Quote: 引用 1 楼 DBA_Huangzj 的回复:

    [code=sql]----------------------------------------------------------------
    -- Author  :DBA_HuangZJ(發糞塗牆)
    -- Date    :2014-08-08 16:36:52
    -- Version:
    --      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
    -- May 14 2014 18:34:29 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
    --
    ----------------------------------------------------------------
    --> 测试数据:[上网记录]
    if object_id('[上网记录]') is not null drop table [上网记录]
    go 
    create table [上网记录]([ID] int,[名称] varchar(4),[开始上网时间] datetime,[上网时长] int)
    insert [上网记录]
    select 1,'张三','2014-01-01 16:30:00',10 union all
    select 2,'李四','2014-01-02 16:40:00',20 union all
    select 3,'张三','2014-01-03 16:30:00',30 union all
    select 4,'李四','2014-01-04 16:40:00',40
    --> 测试数据:[会员列表]
    if object_id('[会员列表]') is not null drop table [会员列表]
    go 
    create table [会员列表]([ID] int,[名称] varchar(4))
    insert [会员列表]
    select 1,'张三' union all
    select 2,'李四' union all
    select 3,'王五'
    --------------开始查询--------------------------select * 
    from [会员列表] a LEFT JOIN (
    select 名称,MAX(DATEADD(HOUR,上网时长,开始上网时间))最后上网时间
    from [上网记录]
    GROUP BY 名称)b ON a.名称=b.名称
    ----------------结果----------------------------
    /* 
    ID          名称   名称   最后上网时间
    ----------- ---- ---- -----------------------
    1           张三   张三   2014-01-04 22:30:00.000
    2           李四   李四   2014-01-06 08:40:00.000
    3           王五   NULL NULL
    你这个查出来的结果不是楼主想要结果