SQL如何根据产品AwardedDate匹配财年表返回对应财年名称
实现方案
完整SQL语句
你需要的日期范围匹配可以直接用BETWEEN实现,如果你要生成无重复的下拉菜单财年选项,完整语句如下:
SELECT DISTINCT fy.Name AS FiscalYearName FROM Products LEFT JOIN FiscalYear fy ON Products.AwardedDate BETWEEN fy.StartDate AND fy.EndDate -- 不需要过滤无匹配财年的话可以删掉下一行 WHERE fy.Name IS NOT NULL -- 按时间排序让下拉选项符合使用习惯,要升序就把DESC改成ASC ORDER BY fy.StartDate DESC
逻辑说明
- 核心匹配规则:
BETWEEN会判断AwardedDate是否大于等于StartDate且小于等于EndDate,正好符合财年的范围匹配要求。你举的例子2016-11-27大于FY17的起始日期2016-10-01、小于结束日期2017-09-30,会正确返回FY17。 - 加
DISTINCT是避免多个产品落在同一个财年时返回重复的财年名称,适配下拉菜单的生成场景。
特殊场景适配
如果你的数据里AwardedDate带时分秒,可能出现2017-09-30 14:00:00匹配失效的问题,可以把关联条件改成如下写法规避:
ON Products.AwardedDate >= fy.StartDate AND Products.AwardedDate < DATE_ADD(fy.EndDate, INTERVAL 1 DAY)
内容的提问来源于stack exchange,提问作者klaurtar1
相关产品推荐
相关产品推荐

