在 SQL 我如何 select 在另一列中没有零值的最新日期

In SQL how do I select the latest date that does not have a zero value in another column

我正在尝试 select table 中的最大日期,该日期具有预订日期和该日期的书面保险费值。我想要有 Written Premium(不等于零)的最新日期。

在上面的 table 中,我想要或期望查询中的第 4 行(7/28/2021,330000),但我得到了第一行

(8/20/21, 0)

这是我的查询 运行:

SELECT 
    MAX(booking_date) AS [Max Booking Date]
FROM 
    DW.dbo.Table1
GROUP BY 
    booking_year
HAVING 
    SUM(written_premium) <> 0
    AND booking_year = '2021'

我认为这是所有书面保费的总和,而不是超过行数,所以我只是得到最长预订日期。也许我需要一个 PARTITION BY 函数之类的?我一直坚持这一点,如果能就如何最好地做到这一点提供任何帮助,我将不胜感激。

谢谢,

布莱恩

我认为有多种选择,但一个可能是:

SELECT TOP 1 booking_date, written_premium 
FROM DW.dbo.Table1
WHERE written_premium <> 0
ORDER BY booking_date DESC 

如果您只需要日期,那么就不需要 group byHAVING 子句。
WHERE 子句中设置条件:

SELECT MAX(booking_date) AS [Max Booking Date]
FROM DW.dbo.Table1
WHERE booking_year = '2021' AND written_premium <> 0;

如果您想要两列:

SELECT TOP 1 booking_date AS [Max Booking Date], written_premium 
FROM DW.dbo.Table1
WHERE booking_year = '2021' AND written_premium <> 0
ORDER BY booking_date DESC;