首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从每一组中获得前1名的记录

如何从每一组中获得前1名的记录
EN

Stack Overflow用户
提问于 2021-08-31 13:00:57
回答 1查看 93关注 0票数 0

我有一张发票表,上面有一个独特的id,发票日期和公司id。我遇到的问题是发票日期只是日期部分,不包括时间。我们有一些公司在同一天有多张发票,因此下面的查询返回该日期的所有记录,而不是预期的1张最新发票。是否也可以获得行的最大id,将其限制为每个日期/公司仅一个结果?如果是这样的话,是怎么做的?

代码语言:javascript
复制
SELECT  accountinginvoice.CompanyId, accountinginvoice.invoicedate
    FROM accountinginvoice
    INNER JOIN (
        SELECT MAX(invoicedate) as invoicedate, companyid FROM accountinginvoice
        GROUP BY companyid
    ) AS ai ON (accountinginvoice.invoicedate = ai.invoicedate
        AND accountinginvoice.companyid = ai.companyid)
        
        order by  accountinginvoice.invoicedate

下面是我得到的结果的一个例子。

代码语言:javascript
复制
id   | invoicedate             | companyid
1037 | 2021-01-06 00:00:00.000 | 6639
1039 | 2021-01-06 00:00:00.000 | 6639
1040 | 2021-01-06 00:00:00.000 | 6639
1045 | 2021-01-06 00:00:00.000 | 6639
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 13:14:06

好吧,这是记忆中的:

代码语言:javascript
复制
;
WITH cte AS (
   SELECT  *
        ,  row_index = row_number() OVER (PARTITION BY companyId, invoiceDate
                                          ORDER BY invoiceID desc )
   FROM    accountingInvoice
)
SELECT     cte.invoiceId,
           cte.CompanyId, 
           cte.invoicedate
FROM       cte
WHERE      cte.row_index = 1

这应该是每个公司每个日期的最后一张发票。如果您想要一个特定的日期和公司,请将它们作为WHERE子句添加到最终查询中。

Larnu的链接也很好,虽然我是从记忆中做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68999171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档