0

我有一个名为“ratings”的表,其中包含一个索引,该索引是唯一的升序数字,ProductId 是产品代码,rate1 到 rate5 是每个产品获得客户 1 星或 5 星评级的次数 aveRate 是每个产品的平均评分和 lastSubDate 应该是提交每个产品的最后评论的时间戳,但它目前为空。

id  ProductId   rate1   rate2   rate3   rate4   rate5   aveRate     lastSubDate


18  9996637     0   0   0   0   1   5   0000-00-00 00:00:00
26  9996628     1   0   0   0   0   1   0000-00-00 00:00:00
34  9996618     0   0   0   1   0   4   0000-00-00 00:00:00
36  9996614     5   0   0   0   0   1   0000-00-00 00:00:00
48  9996592     5   0   1   0   3   3   0000-00-00 00:00:00
66  9996566     0   0   0   1   3   5   0000-00-00 00:00:00

在另一个我称之为“last_rate_date”的表中,我有 ProductId 和该产品最后一次评级为 lastSubDate 的日期。在此表中,产品 ID 可以根据示例出现多次,因为每一行代表客户提交评论的时间。

ProductId   lastSubDate
9996665     2009-05-22 19:45:05
9996665     2009-08-06 11:30:07
9996665     2010-11-10 08:30:17
9996665     2011-06-10 09:15:47
9996665     2011-06-12 05:15:39

我的问题是如何使用 SQL 修改第一个表“ratings”以插入上次在“lastSubDate”下查看产品的时间,使用第二个表“last_rate_date”查找 productId 和记住每个 ProductId 可能出现的日期此秒表中有多个不同日期的时间。

这需要作为对第一个表的一个表外修改。完成此操作后,我将修改将数据添加到评级表的脚本,以便在将来更新时始终添加时间戳。

4

2 回答 2

1

您可以使用以下查询获取每个“ProductId”的最新日期:

Select ProductId, MAX(lastSubDate)
From last_rate_date
Group By ProductId

这将生成出现在第二个表中的每个 ProductId 以及最新日期(使用 MAX 函数)。需要 Group By 子句来定义运行聚合的对象。

为了进一步解决您的问题,您可以将此 Select 语句插入到 Update 语句中,如下所示:

UPDATE ratings a
INNER JOIN (
    Select ProductId, MAX(lastSubDate) as finalLastSubDate
    From last_rate_date
    Group By ProductId ) b
ON a.ProductId = b.ProductId
SET a.lastSubDate = b.finalLastSubDate
于 2013-05-24T17:04:23.110 回答
1

您可以使用带有 CURRENT_TIMESTAMP 默认值的时间戳,也可以在插入时添加日期。

$date = date ("m-Y-d, H: i: s")
于 2013-05-24T16:30:41.803 回答