我有两个表,一个是'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;
答案 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
的问题是它既不是......
GROUP BY
条款当遇到不满足这些条件的字段表达式时,访问通常会抱怨。