在 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 by
和 HAVING
子句。
在 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;
我正在尝试 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 by
和 HAVING
子句。
在 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;