SQL查询 - 需要添加最近的日期

时间:2013-12-23 18:18:06

标签: sql ms-access aggregate-functions

我有两个表,一个是'Property'有一个主键ID,数字为1-9,另一个('Viewings')有一个字段,它使用每个记录中的一个ID号 - 某些数字可能会被使用更多比一次,例如4可能有两个记录。在查看时,每条记录还有一个日期字段。

我有一个查询,它计算值在视图表中出现的次数,并返回一个数据表,其中包含Property表中的ID以及该ID在Viewings表中的字段中出现的次数。

我现在要做的是为每一行添加日期。困难的部分是,因为一些记录将具有两次例如两次,所以将有两个不同的日期。我希望能够选择最近的日期并使其显示为我查询中的第三列。

到目前为止,我已经计算了ID,但我也在尝试添加日期:

SELECT Property.ID,
Count(Viewings.Property_Viewed) AS ViewingCount
FROM Property LEFT JOIN Viewings ON Property.ID = Viewings.Property_Viewed
GROUP BY Property.ID;

这是我尝试添加日期 - 这是不完整的:

SELECT Property.ID, Viewings.Viewing_Date,
Count(Viewings.Property_Viewed) AS ViewingCount,
MAX(Viewings.Viewing_Date) AS Vdate
FROM Property LEFT JOIN Viewings ON Property.ID = Viewings.Property_Viewed
GROUP BY Property.ID;

2 个答案:

答案 0 :(得分:1)

我建议分别构建每个查询,然后将每个查询连接到属性表。

所以你会做类似的事情:

SELECT 
    P.Id AS PropertyId
    VC.ViewingCount,
    VD.LastViewing
FROM Property P
LEFT JOIN
( 
    SELECT 
        Property_Viewed AS PropertyId
        Count(Viewings.Property_Viewed) AS ViewingCount 
    FROM Viewings
    GROUP BY Property_Viewed
) AS VC ON P.Id = VC.PropertyId
LEFT JOIN
(
    SELECT 
        Property_Viewed AS PropertyId
        MAX(Viewings.Viewing_Date) AS LastViewing
    FROM Viewings
    GROUP BY Property_Viewed
) AS VD ON P.Id = VD.PropertyId

答案 1 :(得分:0)

我最好的猜测是,您只需要从Viewings.Viewing_Date子句中删除SELECT即可获得所需的结果。

SELECT
    Property.ID, 
    Count(Viewings.Property_Viewed) AS ViewingCount,
    MAX(Viewings.Viewing_Date) AS Vdate
FROM
    Property
    LEFT JOIN Viewings
    ON Property.ID = Viewings.Property_Viewed
GROUP BY Property.ID;

该结果集应包含每个Property.ID的行,其中包含该属性的查看次数和最近查看的日期。对于Viewings表中未找到的任何属性,date列将包含null。

Viewings.Viewing_Date子句中SELECT的问题是它既不是......

  1. 基于聚合函数(count,min,max等)的字段表达式
  2. 包含在GROUP BY条款
  3. 当遇到不满足这些条件的字段表达式时,访问通常会抱怨。