我有一张发票表,上面有一个独特的id,发票日期和公司id。我遇到的问题是发票日期只是日期部分,不包括时间。我们有一些公司在同一天有多张发票,因此下面的查询返回该日期的所有记录,而不是预期的1张最新发票。是否也可以获得行的最大id,将其限制为每个日期/公司仅一个结果?如果是这样的话,是怎么做的?
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下面是我得到的结果的一个例子。
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发布于 2021-08-31 13:14:06
好吧,这是记忆中的:
;
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的链接也很好,虽然我是从记忆中做的。
https://stackoverflow.com/questions/68999171
复制相似问题