attachments = [{ title:"Ticket #1943: Can't reset my password", title_link:"https://groove.hq/path/to/ticket/1943", text:"Help! I tried to reset my password but nothing happened!", color:"#7CD197" }] slack.post "New ticket from Andrea Lee", attachments: attachments
# 現在契約を取得する SELECT * FROM contracts WHERE start_date >= 現在日付 AND end_date <= 現在日付
現在契約を取得するのは簡単ですが、その次の契約を取得するとなるとそう単純にはいきません。
そこで、相関サブクエリを使います。 相関サブクエリを使うことで次回契約を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12
# 次回契約を取得する SELECT * FROM contracts As cont WHERE start_date = (SELECTMIN(start_date) FROM contracts as c1 WHERE c1.start_date > ( SELECT end_date FROM contracts as c2 WHERE c2.start_date <= '20150528' AND c2.end_date >= '20150528' AND c1.account_id = c2.account_id) AND cont.account_id = c1.account_id GROUPBY c1.account_id);
結果
id
account_id
start_date
end_date
3
1
20160101
20161231
6
2
20160101
20161231
クエリの説明
クエリの説明をします。
クエリは内側からみていきます。 まずは、一番内側にある、 SELECT end_date ... AND c1.account_id = c2.account_idのクエリです。 このクエリでは現在の契約(ここでは2015/5/28とします)を取得します。
2つめのクエリで、次回以降の契約を取得します。 SELECT MIN(start_date) を使うことで、次回契約のなかで直近の契約を取得できます。 アカウントごとに直近の次回契約を取得したいので、GROUP BY account_id をしています。