指定日の時間毎に最多出現する項目の中から最新日時を持った行のみを取得したいのですが
以下の内容では不要な行が出てしまいます。
SELECT SUBSTR(日時, 12, 2) AS 時間,
項目,
COUNT(項目) AS 項目件数,
MAX(日時) AS 最新日時
FROM Test
WHERE 日時 BETWEEN '2010-12-01 00:00:00' AND '2010-12-01 23:59:59'
GROUP BY SUBSTR(日時, 12, 2),
項目
※SUBSTR(日時, 12, 2)は日時から'時'(hour)を取得しています
サブクエリーを使用しないといけない様な気がするのですが
どなたか知恵をお貸しいただけないでしょうか?
【期待例】
日時 | 項目
--------------------
2010-12-01 00:00:00 | 1
2010-12-01 00:01:00 | 1
2010-12-01 00:02:00 | 1
2010-12-01 00:03:00 | 2
2010-12-01 00:04:00 | 2
2010-12-01 00:05:00 | 2
2010-12-01 00:06:00 | 3
2010-12-01 00:07:00 | 3
2010-12-01 00:08:00 | 0
2010-12-01 00:09:00 | 0
2010-12-01 01:00:00 | 4
2010-12-01 01:01:00 | 4
2010-12-01 01:02:00 | 5
↓
時間 | 項目 | 件数 | 最新日時
----------------------------------------
00 | 2 | 3 | 2010-12-01 00:05:00
01 | 4 | 2 | 2010-12-01 01:01:00
環境は【SqLite3】を使用しています。
No.1ベストアンサー
- 回答日時:
回答ありがとうございます。
ただ今SQLを確認中です。
提示した期待例はOKでしたが、
INNER JOINを利用したため
いくつかのテーブルを結合できず
0件となってしまいました。
各SELECTにWHERE区で期間の条件を加えると
期待した内容になるようですが
使い方は合っていますでしょうか?
※そもそもテーブルには分単位でINSERTし
60分×24時間×365日×N年という情報を
記述しなかった私に問題がありましたね。
申し訳ありません。
No.2
- 回答日時:
とりあえず、中間回答ということで
SELECT T1.時間,T1.項目,T1.項目件数,
(SELECT MAX(日時) FROM Test WHERE Test.項目=T1.項目
And 日時 BETWEEN '2010-12-01 00:00:00' AND '2010-12-01 23:59:59' ) AS
最新日時
FROM
( SELECT SUBSTR(日時, 12, 2) AS 時間, 項目, COUNT(項目) AS 項目件数 FROM
Test
GROUP BY SUBSTR(日時, 12, 2),項目 ) AS T1 INNER JOIN
( SELECT 時間, MAX(項目件数) AS 最大件数
FROM ( SELECT SUBSTR(日時, 12, 2) AS 時間, 項目, COUNT(項目) AS 項目件数 FROM Test
GROUP BY SUBSTR(日時, 12, 2),項目 )
GROUP BY 時間 ) AS T2
ON T1.時間=T2.時間 AND T1.項目件数=T2.最大件数
問題は、「最多出現する項目」が複数あった場合ですね。
Oracle、DB2,Sqlserver,PosgresqlのようにWindow関数があると簡単ですが、Sqliteだと上記の結果を元にもう一度結合処理するぐらいしか思い当たりません。
回答ありがとうございます。
ただ今SQLを確認中です。
提示した期待例はOKでしたが、
テーブル結合に難があるようで
上手くデータが入らない箇所があるようです。
やはりWHERE句の条件が無いからでしょうか。
※そもそもテーブルには分単位でINSERTし
60分×24時間×365日×N年という情報を
記述しなかった私に問題がありましたね。
申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
必須入力項目と入力必須項目
-
Access テキスト型に対する指定...
-
datファイルからaccessにインポ...
-
空白をそのままインポートする...
-
APN設定について教えていただけ...
-
複数のレコードを1つのレコード...
-
セルの右クリックで出る項目を...
-
エクセルVBAで5行目からオート...
-
VBAで複数の数式セルを最終行ま...
-
[英語プレゼン]小結論のいいかた
-
条件に一致した列の非表示の仕...
-
SQLServerのGROUP BYについて
-
このような感じでUSBが開けなく...
-
Oracle 2つのDate型の値の差を...
-
2行目を表示できますか?
-
エクセルグラフの凡例スペース
-
PC-98でHDDに複数OSを入れる...
-
OCNのwebメールを開くとき、シ...
-
ANDの順番とGROUP BYについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
セルの右クリックで出る項目を...
-
Access テキスト型に対する指定...
-
Oracle 2つのDate型の値の差を...
-
SUBSTRING 関数に渡した長さの...
-
必須入力項目と入力必須項目
-
APN設定について教えていただけ...
-
エクセルグラフの凡例スペース
-
VBAで複数の数式セルを最終行ま...
-
空白をそのままインポートする...
-
BIOSでAHCIに設定したいが、項...
-
アンドロイド おサイフケータイ...
-
Accessで数値型にNULLをInsert...
-
複数のレコードを1つのレコード...
-
ORACLEでLONG項目からCHAR項目...
-
SELECT文でLEFT関数を使うと未...
-
Access又はExcelで256項目を超...
-
Accessレポートで特定条件で改...
-
2行目を表示できますか?
おすすめ情報