MySQL查询来比较两个日期,它将从一列遍历到另一列
我有一张表格MySQL查询来比较两个日期,它将从一列遍历到另一列,mysql,Mysql,我有一张表格pa_acc_status,我附上了表格的图像 我想比较2个日期(一个是用户输入,另一个是列值),它将使用MYSQL在一个循环中从一列遍历到另一列 例如:首先,它将检查step\u 22\u due\u date列是否不为空,以及step\u 22\u due\u datestep\u 21\u completestep\u 21\u due\u date 我想要两种方式的输出 案例1:用户日期=2016-09-03 先这样 id | step_1_complete | step_2
pa_acc_status
,我附上了表格的图像
我想比较2个日期(一个是用户输入,另一个是列值),它将使用MYSQL在一个循环中从一列遍历到另一列
例如:首先,它将检查step\u 22\u due\u date
列是否不为空,以及step\u 22\u due\u date
step\u 21\u complete
step\u 21\u due\u date
我想要两种方式的输出
案例1:用户日期=2016-09-03
先这样
id | step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
1 | NULL | 2016-03-12 | NULL | NULL | 1
2 | NULL | 2016-03-12 | NULL | NULL | 1
3 | NULL | NULL | NULL | 2016-04-15 | 2
4 | NULL | 2016-03-12 | NULL | NULL | 2
5 | NULL | NULL | 2016-03-12 | NULL | 2
id | step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
1 | 2016-03-08 | NULL | NULL | NULL | 1
2 | 2016-03-08 | NULL | NULL | NULL | 1
3 | 2016-03-08 | NULL | NULL | NULL | 2
4 | 2016-01-03 | NULL | NULL | NULL | 2
5 | NULL | 2016-03-08 | NULL | NULL | 2
第二个是不为空的日期计数,并按用户id分组
step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
0 | 2 | 0 | 0 | 1
0 | 1 | 1 | 1 | 2
step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
2 | 0 | 0 | 0 | 1
2 | 1 | 0 | 0 | 2
案例2:用户日期=2016-03-10
先这样
id | step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
1 | NULL | 2016-03-12 | NULL | NULL | 1
2 | NULL | 2016-03-12 | NULL | NULL | 1
3 | NULL | NULL | NULL | 2016-04-15 | 2
4 | NULL | 2016-03-12 | NULL | NULL | 2
5 | NULL | NULL | 2016-03-12 | NULL | 2
id | step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
1 | 2016-03-08 | NULL | NULL | NULL | 1
2 | 2016-03-08 | NULL | NULL | NULL | 1
3 | 2016-03-08 | NULL | NULL | NULL | 2
4 | 2016-01-03 | NULL | NULL | NULL | 2
5 | NULL | 2016-03-08 | NULL | NULL | 2
第二个是不为空的日期计数,并按用户id分组
step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
0 | 2 | 0 | 0 | 1
0 | 1 | 1 | 1 | 2
step_1_complete | step_21_due_date | step_21_complete | step_22_due_date | user_id
2 | 0 | 0 | 0 | 1
2 | 1 | 0 | 0 | 2
我不知道是否可以使用MySQL,任何帮助或建议都会有帮助。最后我得到了解决方案,关于我的问题
用于数据列表
SET @USER_DATE = '2016-03-08';
SELECT *
FROM
(SELECT `id`,
`user_id`,
`step_1_complete`,
NULL AS `step_21_due_date`,
NULL AS `step_21_complete`,
NULL AS `step_22_due_date`
FROM `pf_acc_status`
WHERE `step_1_complete` IS NOT NULL
AND `step_1_complete` <= @USER_DATE
AND (`step_21_due_date` IS NULL
OR step_21_due_date >= @USER_DATE)
UNION ALL SELECT `id`,
`user_id`,
NULL AS `step_1_complete`,
`step_21_due_date`,
NULL AS `step_21_complete`,
NULL AS `step_22_due_date`
FROM `pf_acc_status`
WHERE `step_21_due_date` IS NOT NULL
AND `step_21_due_date` <= @USER_DATE
AND (`step_21_complete` IS NULL
OR step_21_complete >= @USER_DATE)
UNION ALL SELECT `id`,
`user_id`,
NULL AS `step_1_complete`,
NULL AS `step_21_due_date`,
`step_21_complete`,
NULL AS `step_22_due_date`
FROM `pf_acc_status`
WHERE `step_21_complete` IS NOT NULL
AND `step_21_complete` <= @USER_DATE
AND (`step_22_due_date` IS NULL
OR step_22_due_date >= @USER_DATE)
UNION ALL SELECT `id`,
`user_id`,
NULL AS `step_1_complete`,
NULL AS `step_21_due_date`,
NULL AS `step_21_complete`,
`step_22_due_date`
FROM `pf_acc_status`
WHERE `step_22_due_date` IS NOT NULL
AND `step_22_due_date` <= @USER_DATE ) AS `a`
ORDER BY a.`id` ASC
当然有可能。您可以在存储过程中写入游标。如果您考虑使用案例,则当步骤22\u到期日不为空,然后步骤22\u到期日当步骤21\u完成时,则性能将非常差。。。。其他的结束
您完全可以用这样的表达式编写逻辑@德鲁:我不知道光标,但我会在谷歌搜索。我应该在DB层还是编程层做什么?@OllieJones:谢谢,让我试试。