使用/ concat和adddate嵌套MySQL查询

时间:2013-01-24 02:03:48

标签: mysql nested concat-ws

我正在尝试嵌套一些查询,但到目前为止我正在收回错误1242:子查询返回超过1行。我想要多行,因为我正在处理许多记录。

我有2张桌子。一个开始日期存储在3列中; yr_comm,mth_comm,day_comm。第二个表有一个服务周期(以年为单位),表示为整数(2.71,3.45等)。

我需要从这个开始日期(从表1开始),并添加服务期(从表2)到获得结束日期,但我只需要显示年份。

我有2个查询在单独时工作得很好,它们会产生所需的值,但是我在组合查询以获得所需的最终结果时遇到了问题。

查询1:将3个开始值连接成日期格式

SELECT concat_ws('-', yr_comm, mth_comm, day_comm) AS date_comm
FROM table 1

查询2:将整数yrs_service转换为天数

SELECT format(yrs_served * 365, 0)  AS days_served
FROM table 2

查询3:使用date_add函数将日期服务添加到开始日期

SELECT date_add(date_comm, INTERVAL days_served DAY) AS date_left

有人可以建议我如何实现上述目标吗?非常感谢提前。

编辑 - 这是我正在处理的完整查询:

SELECT prime_minister.pm_name, yr_comm, party, ADDDATE(
    (SELECT CONCAT_WS('-', yr_comm, mth_comm, day_comm) FROM ministry), INTERVAL 
    (SELECT FORMAT(yrs_served * 365, 0) FROM prime_minister) YEAR) AS date_left
FROM ministry JOIN prime_minister USING (pm_name)
WHERE party NOT LIKE '%labor%'
AND prime_minister.pm_name = ministry.pm_name
ORDER BY pm_name;

1 个答案:

答案 0 :(得分:0)

您可以使用用户变量

SET @date = CONCAT_WS('-', 2012,1,1);   -- paste your query here
SET @toAdd = (SELECT MONTH(CURDATE())); -- paste your query here
SELECT DATE_ADD(@date, INTERVAL @toAdd DAY) AS date_left

相同
SET @date = CONCAT_WS('-', 2012,1,1);   -- paste your query here
SET @toAdd = (SELECT MONTH(CURDATE())); -- paste your query here
SELECT @date + INTERVAL @toAdd DAY AS date_left

或不使用变量,更长,

SELECT (CONCAT_WS('-', 2012,1,1)) + INTERVAL (SELECT MONTH(CURDATE())) DAY AS date_left