如何在不使用 row_number 函数的情况下使用 dupes 获取第一行?
How to get the first row with dupes and without using the row_number function?
我正在 运行 在 ubuntu 机器上安装一些 SQL,看起来 Windows 功能不可用。我正在尝试将此设置为 运行.
SELECT date, deb, req
FROM (SELECT date, deb, req,
Row_number() OVER(Partition BY date, deb, req ORDER BY date, deb, req ) rn
FROM fsm) t
WHERE rn = 1
And data_date >= '01/01/2020'
这似乎行不通,所以我测试了其他几个想法,但无法实现 运行ning。我正在使用 MySQL。有什么想法吗?
据推测,您是 运行 MySQL 的 5.x 版本,其中 window 功能不可用。
您的查询没有意义,因为它在 window 函数的 partition
和 order by
子句中具有相同的列;让我假设你想要每个 date
和 deb
的记录,它具有最小的 req
.
如果是这样,您可以通过使用相关子查询过滤数据集来实现相同的逻辑:
select date, deb, req
from fsm f
where date >= '2020-01-01' and f.req = (
select min(f1.req)
from fsm f1
where f1.date = f.date and f1.deb = f.deb
)
这等同于只要在table中没有重复的(date, deb, req)
;在这种情况下,子查询解决方案 returns 全部重复,而 window 函数 returns 只是其中之一。如果这是一个问题,您仍然可以在外部查询中使用 select distinct
解决此特定查询的问题。
注意到您原始查询中的日期文字格式不正确; MySQL 想要 YYYY-MM-DD
格式的日期
我正在 运行 在 ubuntu 机器上安装一些 SQL,看起来 Windows 功能不可用。我正在尝试将此设置为 运行.
SELECT date, deb, req
FROM (SELECT date, deb, req,
Row_number() OVER(Partition BY date, deb, req ORDER BY date, deb, req ) rn
FROM fsm) t
WHERE rn = 1
And data_date >= '01/01/2020'
这似乎行不通,所以我测试了其他几个想法,但无法实现 运行ning。我正在使用 MySQL。有什么想法吗?
据推测,您是 运行 MySQL 的 5.x 版本,其中 window 功能不可用。
您的查询没有意义,因为它在 window 函数的 partition
和 order by
子句中具有相同的列;让我假设你想要每个 date
和 deb
的记录,它具有最小的 req
.
如果是这样,您可以通过使用相关子查询过滤数据集来实现相同的逻辑:
select date, deb, req
from fsm f
where date >= '2020-01-01' and f.req = (
select min(f1.req)
from fsm f1
where f1.date = f.date and f1.deb = f.deb
)
这等同于只要在table中没有重复的(date, deb, req)
;在这种情况下,子查询解决方案 returns 全部重复,而 window 函数 returns 只是其中之一。如果这是一个问题,您仍然可以在外部查询中使用 select distinct
解决此特定查询的问题。
注意到您原始查询中的日期文字格式不正确; MySQL 想要 YYYY-MM-DD