当前位置: 首页 > 知识库问答 >
问题:

如何通过

莫繁
2023-03-14

当我按类别进行分组时,我如何获得最新的产品标题?

例如,假设这是我的产品表:

id | title | catID | timestamp
1  | apple | 1     | 2020-07-13 08:21:47
2  | pear  | 1     | 2020-07-14 08:21:47
3  | kiwi  | 1     | 2020-07-15 08:21:47

我想要一个查询,给我的总产品和最后添加。它有点贪心查询,使它变得更困难,但是我想我可以用一个group by来完成这个任务。如果可能的话,我真的更愿意将所有这些都保留在一个查询中。不过,我担心我需要添加一个子查询。

SELECT
    p.catID
    , COUNT(p.id) as items
    , MAX(p.id) as last_added_id
    , CASE WHEN p.id = MAX(p.id) THEN p.title
FROM products p
    WHERE p.catID = 1
GROUP BY p.catID

问题是,我的头衔是空的

共有2个答案

佟寒
2023-03-14

使用窗口函数count()max()first_value():

select distinct
  p.catid,
  count(*) over (partition by p.catid) items,
  first_value(p.id) over (partition by p.catid order by p.timestamp desc) id, 
  first_value(p.title) over (partition by p.catid order by p.timestamp desc) title,
  max(p.timestamp) over (partition by p.catid) timestamp
from products p

请参阅演示。
结果:

> catid | items | id | title | timestamp          
> ----: | ----: | -: | :---- | :------------------
>     1 |     3 |  3 | kiwi  | 2020-07-15 08:21:47
谢涵煦
2023-03-14

我实际上想不出一种不使用子查询就能做到这一点的方法。假设您使用的是MySQL8+,我们可以在这里使用窗口函数:

SELECT id, title, catID, timestamp, cnt
FROM
(
    SELECT *, COUNT(*) OVER () AS cnt
    FROM products
    WHERE catID = 1
) t
ORDER BY timestamp DESC
LIMIT 1;
 类似资料:
  • 我已经使用MongoDB C#驱动程序以编程方式创建了一个新的文档集合。 现在,我想以编程方式创建和构建索引。我该怎么做呢?

  • 如何通话     拨打电话 接电话 通话时可选择的操作

  • 问题内容: 我试图确定如何访问JObject中的数据,但我终生无法确定如何使用它。 我可以将其打印到执行Console.WriteLine(Object)的控制台中,然后看到数据,它看起来像: 但是我不知道如何迭代/枚举它,任何人都有想法吗?我现在很茫然。 问题答案: 如果您查看相关文档,将会发现它实现了。因此,您可以使用以下命令简单地对其进行迭代:

  • 我使用显示Firestore中的数据并对数据进行分页。我想在Firestore更改时用新数据刷新适配器。在我想通知数据时不起作用。当前我调用以下命令:

  • 问题内容: 我正在考虑AJAX应用程序必须轮询轮询更新有多大限制,而最理想的是javascript能够建立与服务器的真正双向连接。我想知道是否存在将javascript与可以建立tcp连接的浏览器插件集成的方法,以便可以将数据传入和传出浏览器插件。 问题答案: 这是具有类似方法的实现: 套接字 它使用Java Applet,并将其API桥接到JavaScript,有趣的是… 这里是另一个: 套接字

  • 我有这个界面: 我想测试它的实现,但我得到: 在测试中,我使用: 我错过了什么

  • 问题内容: 该代码不起作用 问题答案: JavaScript区分大小写。 因此,如果要更改字体大小,则必须执行以下操作:

  • 问题内容: 我正在使用Express和socket.io创建一个node.js应用程序。我想使用SASS,但我看到有一个npm软件包,我不了解的是如何在SASS npm和应用程序之间链接并使其解析SASS? 更新:我使用SASS中间件https://github.com/andrew/node- sass 安装了它,并通过以下方式包括了它: 但这仍然行不通 问题答案: 您需要使用sass中间件,例