繁体   English   中英

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

[英]SQL: Query 2 tables to get latest date for each record

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

客户表

    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中的项目。 任何输入将不胜感激。 先感谢您!

这非常简单..看到您必须在* 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)

你可以试试看吗?

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)
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

我希望这是您要寻找的。 我对其进行了测试,它给出了您在问题中提到的确切输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM