私はMySQLのクエリを初めて熟読しています。MySQL NULLを取得せずに結果を1つの行に均等に配置する方法
私は一般的にこのように見えるが、より多くのデータを持つ3つのテーブルがあり、最終的なクエリはここにある1つのホスト名によって制限されません。私は単純化しようとしています。
infrastructure_serverテーブル
id | hostname
1 ld0007
infrastructure_server_jobsテーブル
server_id | job_id
1 1
1 2
ここ
id | end_date
1 2015-12-21 09:51:56
2 2016-01-27 10:02:36
jobs_jobテーブルが私のクエリです:
SELECT
CASE WHEN type = "provision" THEN CAST(end_date AS DATE) END AS ProvDate,
CASE WHEN type = "decom" THEN CAST(end_date AS DATE) END AS DecomDate,
infserver.hostname as HostName
FROM
infrastructure_server infserver
inner join infrastructure_server_jobs sj on infserver.id = sj.server_id
inner join jobs_job jj on sj.job_id = jj.id
where
infserver.status != "PROVFAILED"
AND
infserver.group_id ="2"
AND
infserver.hostname ="ld0007"
私の結果は以下のとおりです。
ProvDate, DecomDate, HostName
'2015-12-21', NULL, 'ld0007'
NULL, '2016-01-27', 'ld0007'
私はホスト名でグループを追加する場合、それは一つの行にそれを平らに私はDecomDate失う:
ProvDate, DecomDate, HostName
'2015-12-21', NULL, 'ld0007'
を、私は結果がする必要がどのようなものですホスト名ごとに1つの行:
ProvDate, DecomDate, HostName
'2015-12-21', '2016-01-27', 'ld0007'
はThorsten、カラム型がjobs_jobテーブルです。私が使用しているツールはMySQl Workbenchです。私はオリジナルのポストでMAX()(アウトしてクエリを実行し、ここでinfserver.hostname =「ld0007」を削除した場合、私はそれにカウンターを追加した場合、私は戻って
ProvDate, DecomDate, HostName
'2016-01-28', NULL, 'ld0043'
NULL, '2016-01-29', 'ld0043'
'2016-01-28', NULL, 'ld0044'
NULL, '2016-03-30', 'ld0044'
'2016-01-28', NULL, 'ld0045'
NULL, '2016-03-30', 'ld0045'
'2016-01-28', NULL, 'ld0046'
NULL, '2016-01-28', 'ld0046'
'2016-01-28', NULL, 'ld0047'
NULL, '2016-01-29', 'ld0047'
'2016-01-29', NULL, 'ld0048'
NULL, '2016-03-14', 'ld0048'
'2016-01-29', NULL, 'ld0049'
NULL, '2016-02-09', 'ld0049'
'2016-01-29', NULL, 'ld0050'
NULL, '2016-03-31', 'ld0050'
'2016-01-29', NULL, 'ld0051'
NULL, '2016-01-29', 'ld0051'
'2016-01-29', NULL, 'ld0052'
NULL, '2016-01-29', 'ld0052'
'2016-01-29', NULL, 'ld0053'
NULL, '2016-01-29', 'ld0053'
を取得した行のいくつかであるI私はMAX()を追加すると1989行の合計を取り戻す。私は1つのレコードのみ取り戻す
SET @counter = 0;
SELECT
(@counter:= @counter + 1) as counter,
CASE WHEN type = "provision" THEN CAST(end_date AS DATE) END AS ProvDate,
CASE WHEN type = "decom" THEN CAST(end_date AS DATE) END AS DecomDate,
infserver.hostname as HostName
FROM
infrastructure_server infserver
inner join infrastructure_server_jobs sj on infserver.id = sj.server_id
inner join jobs_job jj on sj.job_id = jj.id
where
infserver.status != "PROVFAILED"
AND
infserver.group_id ="2"
どのテーブルが 'type'列ですか? –
はい、「MAX」などの集計関数は、行を1つの結果行に集約します。ホスト名ごとに1つの結果行が必要な場合は、回答に示されているようにホスト名でグループ化します。 –
ありがとう私は私の質問でそれが欠けていたことに気付いた。それは働いている!再度、感謝します! – Jockser