mysql 如何在同一查询中使用窗口函数和分组依据

rlcwz9us  于 2023-05-05  发布在  Mysql
关注(0)|答案(1)|浏览(114)

我想在同一个查询中使用window函数和group by子句

SELECT customer,flag ,
FIRST_VALUE(price) OVER (PARTITION BY customer ,flag
order by (case when price > 0 then DATEDIFF(date(create_date), date('2000-01-01')) end) DESC)
 AS `Last Price`
FROM
  (SELECT customer,create_date,flag,price FROM customer) AS virtual_table
WHERE create_date >= '2015-01-01'
  AND create_date < '2023-02-17'
GROUP BY customer,flag

查询在没有group by子句的情况下工作得很好(我已经知道如何做到这一点)。为什么我们不能在这里使用group?请说明是什么原因导致查询不正确?

qv7cva1a

qv7cva1a1#

为什么我们不能在这里使用group?
您尝试在窗口函数中使用未分组的pricecreate_date,这是不正确的。
在GROUP BY之后应用Window函数。因此,查询中的列可见性等于

SELECT customer,flag ,

/* FIRST_VALUE( */ 
    price,
/* ) OVER (PARTITION BY */ 
    customer,
    flag,
/* order by (case when */ 
    price,
/* > 0 then DATEDIFF(date( */
    create_date
/* ), date('2000-01-01')) end) DESC) */
/* AS `Last Price` */

FROM
  (SELECT customer,create_date,flag,price FROM customer) AS virtual_table
WHERE create_date >= '2015-01-01'
  AND create_date < '2023-02-17'
GROUP BY customer,flag

现在您可以看到查询不正确。

相关问题