两张表结构如下;信息表:
 ID,Name ...等字段 时间表: ID   time  date 三个字段 (其中ID 和 time 为关键字)
要求查询到 ID Name Date 等信息 
 
其中日期型的Date 要求是未来距当前系统时间最近的日期   
例如:
下表:
   ID,     Name          ID   time       date 
   zhang     张山        zhang  1        2008-5-5
   li        李四        zhang  2        2008-8-31 
                         zhang  3        2007-9-5
                         zhang  4        2009-9-10
                         zhang  5        2010-5-2
                         li     1        2007-9-5
                         li     2        2009-9-10
                         li     3        2010-5-2  
要求查询 ID为 li的信息  获得信息如下:
 
li        李四   2009-9-10其中的  2009-9-10是未来 距今天最近的日期, 
我知道一条SQL 语句可以搞定,但我数据库不是我的强项 麻烦高人帮下忙 !!

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-30 17:23:22
    ---------------------------------
     
    --> 生成测试数据: @信息表
    DECLARE @信息表 TABLE (ID VARCHAR(5),Name VARCHAR(4))
    INSERT INTO @信息表
    SELECT 'zhang','张山' UNION ALL
    SELECT 'li','李四'
     
    --> 生成测试数据: @时间表
    DECLARE @时间表 TABLE (ID VARCHAR(5),time INT,date DATETIME)
    INSERT INTO @时间表
    SELECT 'zhang',1,'2008-5-5' UNION ALL
    SELECT 'zhang',2,'2008-8-31' UNION ALL
    SELECT 'zhang',3,'2007-9-5' UNION ALL
    SELECT 'zhang',4,'2009-9-10' UNION ALL
    SELECT 'zhang',5,'2010-5-2' UNION ALL
    SELECT 'li',1,'2007-9-5' UNION ALL
    SELECT 'li',2,'2009-9-10' UNION ALL
    SELECT 'li',3,'2010-5-2'--SQL查询如下:SELECT
        A.ID,
        A.Name,
        B.date
    FROM @信息表 AS A
        JOIN (
            SELECT
                ID,
                MIN(date) AS date
            FROM @时间表
            WHERE date>GETDATE()
            GROUP BY ID
        ) AS B
            ON A.ID=B.ID/*
    ID    Name date
    ----- ---- -----------------------
    li    李四   2009-09-10 00:00:00.000
    zhang 张山   2009-09-10 00:00:00.000(2 行受影响)*/
      

  2.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-30 17:23:22
    ---------------------------------
     
    --> 生成测试数据: @信息表
    DECLARE @信息表 TABLE (ID VARCHAR(5),Name VARCHAR(4))
    INSERT INTO @信息表
    SELECT 'zhang','张山' UNION ALL
    SELECT 'li','李四'
     
    --> 生成测试数据: @时间表
    DECLARE @时间表 TABLE (ID VARCHAR(5),time INT,date DATETIME)
    INSERT INTO @时间表
    SELECT 'zhang',1,'2008-5-5' UNION ALL
    SELECT 'zhang',2,'2008-8-31' UNION ALL
    SELECT 'zhang',3,'2007-9-5' UNION ALL
    SELECT 'zhang',4,'2009-9-10' UNION ALL
    SELECT 'zhang',5,'2010-5-2' UNION ALL
    SELECT 'li',1,'2007-9-5' UNION ALL
    SELECT 'li',2,'2009-9-10' UNION ALL
    SELECT 'li',3,'2010-5-2'--SQL查询如下:SELECT
        A.ID,
        A.Name,
        B.date
    FROM @信息表 AS A
        JOIN (
            SELECT
                ID,
                MIN(date) AS date
            FROM @时间表
            WHERE date>GETDATE()
            GROUP BY ID
        ) AS B
            ON A.ID=B.ID
    WHERE A.ID='li'/*
    ID    Name date
    ----- ---- -----------------------
    li    李四   2009-09-10 00:00:00.000(1 行受影响)*/
      

  3.   

    select a.ID,a.Name,b.[time],b.[date] 
    from 信息表 a,时间表 b
    where a.id=b.id
    and b.[date]>getdate()
    and not exists (
     select 1 from 时间表
     where id=b.id
     and [date]>getdate()
     and [date]<b.[date]
     )
      

  4.   

    select 
      a.ID,
      a.Name,
      b.date
    from 信息表 a,时间表 b
    where a.ID=b.ID
    and datediff(day,b.[date],getdate())>0
    and not exists(select * from 时间表 where id=b.id and [time] < b.[date])
      

  5.   

    或者select a.ID,a.Name,b.[time],b.[date] 
    from 信息表 a,时间表 b
    where a.id=b.id
    and b.[date]>getdate()
    and b.[date] = (
     select top 1 [date]
     from 时间表
     where id=b.id
     and [date]>getdate()
     order by [date]
     )
      

  6.   


    c++中的查询语句 ,不知道为什么不行 数据库ACCESS
    strSQL.Format("select bargain.BargainID,bargain.BargainName,bargain.EndorseDate,bargain.EaturityDate,bargain.DocPath,B.PayDate from bargain left join (select BargainID,min(PayDate) from PayTb where PayDate>#%s# and BargainID='%s' group by BargainID) as B on(bargain.BargainID=B.BargainID)",strTime,str);
      

  7.   


    我感觉我写的这条语句没问题啊, 麻烦大家看下  strSQL.Format("select A.BargainID,A.BargainName,A.EndorseDate,A.EaturityDate,A.DocPath,B.PayDate
     
    from bargain AS A left join 
    (select BargainID,min(PayDate) from PayTb where PayDate>#%s# and BargainID='%s' group by BargainID) AS B on (A.BargainID=B.BargainID)",strTime,str);        
      

  8.   

    access 和MSSQL 的语句是有一点点不同的地方,不是完全一样的