从一组记录中获取最后一个日期

时间:2017-08-21 03:45:35

标签: ms-access

******** ********* EDITED

基本上我最终要找的是最后一次预约狗在我们的商店里的详细信息。如你所知,现在我只是拉了MAX日期,我们的客户实际上已经预订了一整年,所以我没有得到他们的最后一次预约,但他们的最后一次预约将来会被预订。

SELECT dbo_Pet.petId, 
         dbo_Pet.petName, 
         dbo_Customer.cstLName, 
         dbo_vwApptGrid.aptDate, 
         dbo_vwApptGrid.aptId, 
         dbo_vwApptGrid.GroomStyle, 
         dbo_vwApptGrid.StatusDescr
FROM (dbo_Customer RIGHT JOIN dbo_Pet ON dbo_Customer.[cstId] = dbo_Pet.[petCustId]) 
         LEFT JOIN dbo_vwApptGrid ON dbo_Pet.petId = dbo_vwApptGrid.aptPetId
WHERE (((dbo_Pet.petId)=[ID]) 
         AND ((dbo_vwApptGrid.aptDate)<=Date()) 
         AND ((dbo_vwApptGrid.aptDate)=(SELECT Max(tMax.aptDate) 
FROM dbo_vwApptGrid As tMax 
WHERE tMax.aptPetId = dbo_Pet.petId)));

根本没有显示任何记录。如果我将最大日期更改为大于今天,它会显示上次预约的约会,就像它应该的那样。 为什么这不会将我的最大日期限制为低于今天?

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题,但我更喜欢使用总计子查询进行过滤(对我想要的内容感觉最具描述性)。

由@ June7评论的解决方案也是有效的(特别是如果您不需要他/她提到的字段)。

添加其他条件时,请始终将这些条件添加到子查询中,永远不要添加到主查询中。如果将它们添加到主查询中,则无法获得任何结果,因为子查询将返回被过滤掉的内容。

SELECT dbo_Pet.petName
    ,dbo_Customer.cstLName
    ,dbo_vwApptGrid.aptId
    ,dbo_vwApptGrid.aptDate AS most_recent
    ,dbo_vwApptGrid.GroomStyle
    ,dbo_vwApptGrid.StatusDescr
FROM (
    dbo_Customer RIGHT JOIN dbo_Pet ON dbo_Customer.[cstId] = dbo_Pet.[petCustId]
    )
LEFT JOIN dbo_vwApptGrid ON dbo_Pet.petId = dbo_vwApptGrid.aptPetId

WHERE dbo_Pet.petId = [ID] 
AND dbo_vwApptGrid.aptDate = (SELECT Max(tMax.aptDate) FROM dbo_vwApptGrid As tMax WHERE tMax.aptPetId = dbo_Pet.petId AND tMax.aptDate <= Date());