Mysql 最后一个期间的SQL选择
我有一张这样的桌子:Mysql 最后一个期间的SQL选择,mysql,sql,triggers,Mysql,Sql,Triggers,我有一张这样的桌子: IDstatusstart\u日期结束\u日期 1A2015-01-012015-12-31 1B2016-01-01NULL 2016年12月31日星期二 3DNULLNULL 这里有一个稍微简化的查询,它返回的结果集与问题中的查询完全相同。它只使用两个子查询,而不是四个子查询(没有重复的子查询): 注意,它不包括a=NULL和b=NULL的情况。若要将其也包括在内,必须删除最后一条和第条,即: SELECT * FROM My_Table AS T WHERE
IDstatusstart\u日期结束\u日期
1A2015-01-012015-12-31
1B2016-01-01NULL
2016年12月31日星期二
3DNULLNULL
这里有一个稍微简化的查询,它返回的结果集与问题中的查询完全相同。它只使用两个子查询,而不是四个子查询(没有重复的子查询):
注意,它不包括a=NULL和b=NULL的情况。若要将其也包括在内,必须删除最后一条和第条,即:
SELECT *
FROM My_Table AS T
WHERE
(T.start_date Is Null OR T.start_date = (SELECT MAX(start_date) FROM My_Table WHERE ID = T.ID)) AND
(T.end_date Is Null OR T.end_date = (SELECT MAX(end_date) FROM My_Table WHERE ID = T.ID))
;
这里有一个稍微简化的查询,它返回的结果集与问题中的查询完全相同。它只使用两个子查询,而不是四个子查询(没有重复的子查询):
注意,它不包括a=NULL和b=NULL的情况。若要将其也包括在内,必须删除最后一条和第条,即:
SELECT *
FROM My_Table AS T
WHERE
(T.start_date Is Null OR T.start_date = (SELECT MAX(start_date) FROM My_Table WHERE ID = T.ID)) AND
(T.end_date Is Null OR T.end_date = (SELECT MAX(end_date) FROM My_Table WHERE ID = T.ID))
;
我会跳过触发器,取而代之的是视图。我会跳过触发器,取而代之的是视图。