如何编辑此 SQL 查询,以便以请求的方式显示数据


How to edit this SQL query so as to display the data in the requested way?

我在我的页面中保存了用户的访问和时间。mySQL 如下所示:

id  - user - page - timestamp
340 - 1 - page1 - 2009-05-18 22:11:11
339 - 1 - page3 - 2009-05-18 22:10:01
337 - 1 - page2 - 2009-05-18 22:06:00
336 - 1 - page1 - 2009-05-18 22:05:10

在上面的示例中,用户 1,首先访问页面 1,然后访问页面 2,页面 3 和再次访问页面 1。

我现在使用的 sql 查询如下:

结果是:

page1 (last page)
page3
page2 (first page)

但实际上,正确的输出应该是

page1 (last page)
page3
page2
page1 (first page)
问题是,如果用户访问同一页面,

它不会显示访问特定页面的所有时间,而是将其移动到顶部。所以路径不正确。

我应该对 SQL 查询进行哪些更改才能解决此问题?

问题是您按页面分组,因此多次访问按日期折叠为一个。

同时删除 max(时间戳)和按日期分组...他们使双重访问消失

SELECT 
page,
`timestamp` 
from behaviour 
WHERE `hash` = 'user1' 
order by `timestamp` desc

您应该删除group by中的page列。

正确的是显示的结果(三个结果)。

如果我理解正确,您将用户ID与数据一起保存。

从您的示例中,前 3 次访问记录了一次user.id = 1,然后最后一次访问记录了 user.id = 2 次。然后,如果您尝试排队访问记录,则无法获得最后一个user 1。因此,您得到"错误"的输出(这是正确的,但我认为它是错误的)

您必须确保user.id与用户表的 pimery 键相关,才能获得正确的输出

更新 1:

好的,我又看到了更新。这一次,如果您按一个属性对结果进行分组,则此属性中的相同值将仅显示一次。您不需要group by page队列。

我认为最好按userdate分组(除非你愿意,否则日期不是必需的)

我想问题是当您也按页面ID对结果进行分组时。 尝试省略它并检查结果。

不是 结果应该是

  • 页1
  • 页2
  • 页3
  • 页1

根据时间

如果是这种情况,这将起作用

  select page, timestamp = min(timestamp) from  behaviour group by page,timestamp