1

いくつかのクエリをネストしようとしていますが、これまでのところエラー 1242: サブクエリが複数の行を返します。多数のレコードに取り組んでいるため、複数の行が必要です。

私は2つのテーブルを持っています。1 つは開始日が 3 つの列に格納されています。yr_comm、mth_comm、day_comm. 2 番目のテーブルには、整数 (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;
4

1 に答える 1

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
于 2013-01-24T02:07:36.480 に答える