如何在不使用 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 函数的 partitionorder by 子句中具有相同的列;让我假设你想要每个 datedeb 的记录,它具有最小的 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

格式的日期