指定日の時間毎に最多出現する項目の中から最新日時を持った行のみを取得したいのですが
以下の内容では不要な行が出てしまいます。
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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Excel(エクセル) Excelについて 3 2023/07/12 17:47
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(ネットショッピング・通販・ECサイト) 中国サイトで商品を購入して今追跡したら、 2023 年 1 月 8 日 08:59 午前 2023- 2 2023/01/08 11:21
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
Access テキスト型に対する指定...
-
エクセルグラフの凡例スペース
-
access2000:フォームで入力し...
-
セルの右クリックで出る項目を...
-
Excelで空白以外の値がある列の...
-
BIOSでAHCIに設定したいが、項...
-
複数のレコードを1つのレコード...
-
SUBSTRING 関数に渡した長さの...
-
空白をそのままインポートする...
-
ORACLEでLONG項目からCHAR項目...
-
2行目を表示できますか?
-
Accessで数値型にNULLをInsert...
-
SQLのSELECT文で*を使わない理由
-
SQLでの変数の扱いについて
-
APN設定について教えていただけ...
-
DBのタイプの指定とサイズにつ...
-
ピボットテーブルについて 列フ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
セルの右クリックで出る項目を...
-
Access テキスト型に対する指定...
-
SUBSTRING 関数に渡した長さの...
-
Accessで数値型にNULLをInsert...
-
APN設定について教えていただけ...
-
エクセルグラフの凡例スペース
-
ORACLEでLONG項目からCHAR項目...
-
複数のレコードを1つのレコード...
-
空白をそのままインポートする...
-
アンドロイド おサイフケータイ...
-
access2000:フォームで入力し...
-
VBAで複数の数式セルを最終行ま...
-
株に関する用語集
-
必須入力項目と入力必須項目
-
他テーブルで一致する列から名...
-
BIOSでAHCIに設定したいが、項...
-
datファイルからaccessにインポ...
おすすめ情報