質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

1975閲覧

sqlデータの取得のやり方

aizawal-hiroki

総合スコア56

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/12/13 07:36

編集2017/12/13 08:00

やりたいことはtesttable1,testtable2という二つのテーブルを結合してDBから最新のエラーを取得したいというものです。

SELECT t1.name,t1.code,t2.testid,t2.message,t2.time FROM testdb.testtable1 t1
INNER JOIN testdb.testtable2 t2
ON t1.id = t2.testid
and message like '%error%'
;

[テーブルの中に入っているもの]
testtable1 : name,code
testtable2 : testid,name,time

【わからないこと】
上のsql文でtesttable1のidとtesttable2のtestidを結びつけました。そのうえでmessageの中にあるerrorというものをあいまい検索しているのですが、ここからtimeで取得した日時から一番新しいものだけを取得したいと思っているのですがどのようにすればいいかわかりません。

SELECT t1.name,t1.code,t2.testid,t2.message,t2.time FROM testdb.testtable1 t1
INNER JOIN testdb.testtable2
ON t1.id = t2.testid
and message like '%error%'
where (t2.testid,t2.time) in (select max(t2.time) from testdb.t2.
group by t2.testid);

試しに上のをやってみましたがうまくいきませんでした。どうすればよろしいでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

SELECT
t1.name,t1.code,t2.testid,t2.message,t2.time
FROM
testdb.testtable1 t1
INNER JOIN
testdb.testtable2 t2
ON
t1.id = t2.testid
AND
message like '%error%'
INNER JOIN
(select testid,max(time) as time from testdb.t2 where message like '%Serror%' group by id) as testtable3
ON
testtable2.id = testtable3.testid
AND
testtable2.time = testtable3.time
;

こんな感じにinner joinを使ってやりました。

投稿2017/12/13 09:14

編集2017/12/13 09:15
aizawal-hiroki

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

新しい順に並べて先頭を取るのでどうでしょうか

sql

1SELECT `name`,`code`,`testid`,`message`,`time` FROM `testtable1` 2INNER JOIN `testtable2` 3ON testtable1.`id` = testtable2.`testid` 4and message like '%error%' 5ORDER BY `time` DESC LIMIT 1;

投稿2017/12/13 08:14

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

message はどちらのテーブルにある項目でしょうか。

以下の t1, t2 のように別名を付けて、「t1.項目名」「t2.項目名」 のような書き方にしてください。

sql

1SELECT name, code, t2.testid, message, time 2FROM testdb.testtable1 t1 3INNER JOIN testdb.testtable2 t2 ON ( 4 t1.id = t2.testid 5 and message like '%error%' 6)

あと SQL は Oracle か SQLServer か MySQL か 何でしょうか


試してないですが・・・ こんな感じ・・・?
動作確認してないです

sql

1SELECT t1.name, t1.code, t2.testid, t2.message, t2.time 2 3FROM testdb.testtable1 t1 4 5-- testtable2 から、id と max(time) のセットを抽出 6INNER JOIN ( 7 SELECT testid, max(time) as time FROM testdb.testtable2 8 WHERE message like '%error%' 9 GROUP BY testid 10) t2_max ON ( 11 t1.id = t2_max.testid 12) 13 14INNER JOIN testdb.testtable2 t2 ON ( 15 t2.testid = t2_max.testid AND 16 t2.time = t2_max.time 17)

# 用事ができてしまった 投げっぱなしで離脱します ごめんなさい
# この質問が明日まで生きてたらちゃんと動作確認しますです

投稿2017/12/13 07:52

編集2017/12/13 08:45
sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aizawal-hiroki

2017/12/13 07:54

ご指摘ありがとうございます。sqlはmysqlです。messageはtesttable2にあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問