SQL:查询2个表以获取每条记录的最新日期

时间:2013-05-13 20:27:50

标签: sql vb.net ms-access

我有两个表要查询客户和服务

客户表

    cnum       lastName        Address       Phone        Comments      

     2         McKenzie        Main Street   1234567898   None
     3         Stevenson       South Street  1225448844   None
     4         Adams           North Street  1234545454   None

服务

     IncidentNum     cnum      serviceDate      status       category      LastUpdated

     x1               2        02-21-2013       Closed       Repair        02-21-2013
     c2               2        05-12-2013       Open         Installation  05-13-2013
     d2               3        05-01-2013       Closed       Repair        05-05-2013
     f2               4        05-12-2013       Open         Repair        05-12-2013

基本上我想要做的是显示每条客户记录的最新更新记录,无论状态是关闭还是打开。

决赛:

    cnum    lastName     Address        Phone        Category       Last Service
     2      McKenzie     Main Street    1234567898   Installation   05-13-2013
     3      Stevenson    South Street   1225448844   Repair         05-05-2013
     4      Adams        North Street   1234545454   Repair         05-12-2013

我正在使用OLEDB,这是我在VB中的项目。 任何输入将不胜感激。提前谢谢!

3 个答案:

答案 0 :(得分:0)

这很简单..看你必须在* cnum *上加入这两个表,然后你可以为最新/最大服务提供条件。

您可以对同一任务使用以下查询 -

select customer.cnum,
       customer.lastname,
       customer.address,
       customer.phone,
       service.category,
       service.servicedate 
  from customer,service
 where customer.cnum = service.cnum
   and service.servicedate = ( select max(serviceDate) from service service2
                                where service2.cnum = customer.cnum)

我希望这就是你要找的......

修改:编辑查询以显示服务表中不存在的客户信息

select customer.cnum,
       customer.lastname,
       customer.address,
       customer.phone,
       service.category,
       service.servicedate 
  from customer left outer join service on (customer.cnum = service.cnum)
   where (service.servicedate = ( select max(serviceDate) from service service2
                                where service2.cnum = customer.cnum)
          or service.cnum is null)

答案 1 :(得分:0)

你能试试吗?

select c.cnum, c.lastname, c.address,
c.phone, s.category, s.servicedate 
from customer c,service s
where c.cnum = s.cnum
group by c.cnum
having s.LastUpdated = max(s.LastUpdated)

答案 2 :(得分:0)

select distinct customer.cnum,customer.lastname,customer.address,customer.phone,
service.category,
MAX(lastupdated)as lastservice from service,customer where service.cnum=customer.cnum
and service.servicedate = ( select max(serviceDate) from service service2
                            where service2.cnum = customer.cnum)
group by customer.cnum,customer.lastname,customer.address,customer.phone,
service.category

我希望这就是你要找的东西。 我测试了它,它给出了你在问题中提到的确切输出。