• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定日の時間毎に最多出現する項目から最新日時の~)

指定日の時間毎に最多出現する項目から最新日時の行のみを取得したい方法は?

このQ&Aのポイント
  • 指定した日時範囲内で、時間ごとに最も多く出現する項目の行を取得したい。
  • その中でも最新の日時を持つ行のみを取得するため、サブクエリを使用する必要があるかもしれない。
  • SQLite3の環境で実装する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

あまりいい書き方ではないかもしれませんが・・・ http://ideone.com/uJHuJ

sapporoSweets
質問者

お礼

回答ありがとうございます。 ただ今SQLを確認中です。 提示した期待例はOKでしたが、 INNER JOINを利用したため いくつかのテーブルを結合できず 0件となってしまいました。 各SELECTにWHERE区で期間の条件を加えると 期待した内容になるようですが 使い方は合っていますでしょうか? ※そもそもテーブルには分単位でINSERTし 60分×24時間×365日×N年という情報を 記述しなかった私に問題がありましたね。 申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答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だと上記の結果を元にもう一度結合処理するぐらいしか思い当たりません。

sapporoSweets
質問者

お礼

回答ありがとうございます。 ただ今SQLを確認中です。 提示した期待例はOKでしたが、 テーブル結合に難があるようで 上手くデータが入らない箇所があるようです。 やはりWHERE句の条件が無いからでしょうか。 ※そもそもテーブルには分単位でINSERTし 60分×24時間×365日×N年という情報を 記述しなかった私に問題がありましたね。 申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • スタートアップの「最近使った項目」で最新項目が表示されません

    Microsoft Vista Home Premiumのスタートアップで「最近使った項目」をクリックしても最新の使用したファイルが表示されません。古い順に表示され、更新されません。仕方なく右クリックで「開く」をクリックし、そのリスト表示で更新日時をクリックして、最新のリストを表示して選択するしかありません。  最新の表示ができるようにする方法を教えて下さい。   また、最近使った項目のクリアは、ヘルプ情報では、[最近使ったファイル] を右クリックし、[最近使った項目の一覧のクリア] をクリックしますとなっていますが、[最近使った項目の一覧のクリア]の項目が表示されません。項目を表示する方法を教えて下さい。

  • sqlについての質問

    お世話になります。 下記コードにて、抽出されたデータに不備があります。 「q2.新新品番(+) = A.品番」としていますが、 完全一致しない品番が見受けられ、trimを使ったら 良いのではと思うのですが、どこにtrimを入れたら 良いのか、又は考え方自体違うのか 現在テンパっている所でございます。 どなたか良いアドバイスを頂けたらと思い、 ご質問させて頂きました。 何卒、ご教示頂けます様、宜しくお願い致します。          記 select case when substr(q2.新新品番,8,1)='_' then substr(q2.新新品番,1,7) else q2.新新品番 end as 品番 ,SUM(q2.新新合格数) AS 生産合格数 ,A.伝票ID,A.品番,A.新入庫数量 as 区画入庫数,A.区画番号 from ( select case when substr(q1.新品番,6,1)='_' then substr(q1.新品番,1,5) else q1.新品番 end as 新新品番 ,SUM(q1.新合格数) AS 新新合格数 from ( SELECT 更新日時, case when substr(ハンドル,7,1)='_' then substr(ハンドル,1,6) else ハンドル end as 新品番 ,SUM(合格本数) AS 新合格数 FROM D最終検査履歴 WHERE 更新日時 BETWEEN '2012-5-31' and '2012-6-01' group by 更新日時, case when substr(ハンドル,7,1)='_' then substr(ハンドル,1,6) else ハンドル end )q1 group by case when substr(q1.新品番,6,1)='_' then substr(q1.新品番,1,5) else q1.新品番 end )q2 , (select 伝票ID,品番,sum(入庫数量)as 新入庫数量,区画番号 from D屋外入庫 where 登録日時 between '2012-5-31' and '2012-6-01' and 伝票ID='SN' group by 伝票ID, 品番, 区画番号 )A where q2.新新品番(+) = A.品番 group by case when substr(q2.新新品番,8,1)='_' then substr(q2.新新品番,1,7) else q2.新新品番 end, A.伝票ID, A.品番, A.新入庫数量, A.区画番号

  • エクセル2000で作成したい

     受信日時  件数  依頼者名  納品日時 1 10/1 11:00 50  田中    10/1 18:00 2 10/1 17:00 100  大塚    10/2  10:00 3 10/2 15:00 100  吉田   10/3 12:00 4 10/2 11:00 100  河野  10/2 18:00 とデータをシート1に入力 シート2のあるセルに印字したい番号「1」と入力すると 受信日時 ○○○←ここにシート1の1行目のテキストがリンクされる 件数  ○○○←ここにシート1の1行目のテキストがリンクされる 依頼者名 ○○○←ここにシート1の1行目のテキストがリンクされる 納品日時 ○○○←ここにシート1の1行目のテキストがリンクされる 納品書のような感じで印字したい。 「1」とシート2のあるセルに入力したら、シート1の「1」の行のテキストが シート2の項目の横にリンクするようにしたい。 なんとなくは分かるのですがどうも上手くいきません。 お願いします    

  • postgresとVBでデータを読み込み項目指定で

    postgresとNpgsqlを使用してVBでデータを読み込みをしています。 読み込んだレコードを項目ごとに分ける際に、配列番号でなく、項目名称を用いて取得する方法を教えて下さい。 'サンプル Dim npgCnct As NpgsqlConnection Dim npgCmnd As NpgsqlCommand Dim npgDR As NpgsqlDataReader Dim strSql As String npgCnct = New Npgsql.NpgsqlConnection npgCnct.ConnectionString = gstrCnct npgCnct.Open() strSql = "select" _ & vbCrLf & "itm1" _ & vbCrLf & ",itm2" _ & vbCrLf & "from tbl1" _ & vbCrLf & "where key1 = 'value1'" _ & vbCrLf & "and key2 = 'value2'" _ & ";" npgCmnd = New NpgsqlCommand npgCmnd.Connection = npgCnct npgCmnd.CommandText = strSql npgDR = npgCmnd.ExecuteReader() Dim strItm1 As String = Space(0) Dim strTtm2 As String = Space(0) While (npgDR.Read()) Dim strSqlfld(npgDR.FieldCount - 1) As String ' コメント1 For index As Integer = 0 To npgDR.FieldCount - 1 Step 1 strSqlfld(index) = IIf(IsDBNull(npgDR(index)) = True, Space(0), npgDR(index)) Select index Case 0 stritm1 = strSqlfld(index).ToString Case 1 stritm2 = strSqlfld(index).ToString Case Else End Select Next index ' コメント2 End While 上記のサンプルの場合で、stritm1、stritm2にデータを移送する際に、 コメント1のくだりを廃止し、 コメント2の下で、 stritm1 = 何かしらの手段('itm1') stritm2 = 何かしらの手段('itm2') という形で取得したいです。 NpgsqlDataReader の操作がイマイチ分かっていません。 DataTableか何かに変換できれば良いのですが。。

  • 副問合せについて

    現在使用しているMySQLではサブクエリーが使えないそうで困っています。 以下の表から、group = 2 に所属している人達の中でもっとも若い人MAX(birthday)の 総ての項目(group name birthday address)を取得したいのですが、 サブクエリーを使わずに取得するには、どの様なSQL文で問い合わせたらいいか教えて頂けないでしょうか、 よろしくお願いします。 group name birthday address 01 Aさん 1971-05-21 東京都 02 Bさん 1981-02-03 神奈川県 01 Cさん 1980-07-26 群馬県 01 Dさん 1976-10-31 埼玉県

  • 環境PHP5 Apache2.0 SQLite

    環境PHP5 Apache2.0 SQLite データベースSQLiteに関する質問なのですが、データベース名、テーブル名のみ解っている状態からテーブルで使用されている項目の一覧などは取得できますでしょうか? データベース名 くだもの テーブル名 くだもの リンゴ バナナ イチゴ  1   3   2  このようにテーブルのみ解っている状態から中身を見ずに項目「りんご」、「バナナ」、「イチゴ」を取得したのです。SQLiteで無くとも、他のデータベースで可能でしたらご教授ください。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 更新日時でソートしてファイル一覧を取得したい

    特定のディレクトリのファイル一覧を取得したいのですが、必要なのは最終更新日時でソートし、最新の30件のファイル名です。(ディレクトリのファイル件数は30件以上とは限りません) exec()を使った外部コマンドでは最新の1件のファイル名は取得できたのですが、30件となると方法がわかりません。 今考え付くのは、 dir()コマンドで取得したファイル名から最終更新日時を取得し、ソートして30件取り出す という方法です。 他にもっとスマートな方法で最新30件のファイル名を取得する方法はないでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • SQLiteの設定

    PHP初心者です。 Apache/2.0.64 (Win32) PHP/5.1.6 上記の環境でphp.iniの設定を編集して、SQLiteを使えるようになりたいです。。 (471行目)extension_dir = "c:\php\ext" ←パスは何度も確認しました。 (607行目)extension=php_pdo.dll (608行目)extension=php_pdo_sqlite.dll (609行目)extension=php_sqlite.dll ↑上記3つのファイルがextフォルダに入っていることも確認しました。 上のようにphp.iniの設定をし直して上書き保存をし、Apacheを再起動させ、phpinfo()で設定確認をしました。 しかしSQLiteの設定項目は一向にあらわれません。。 使用しているPCはwindows vistaです。 何故SQLiteの設定がされていないのか、アドバイス頂きたいです>< (わかりずらい部分があったらすみません。)

    • ベストアンサー
    • PHP
  • バッチ処理でレコード数が多いテーブルの結合について。

    バッチ処理でレコード数が多いテーブルの結合について。 300~500万件程度のテーブルが二つあり、これを結合して情報を取得したいと考えています(両者は1:1ではなく、ない場合も正常な構成です)。 またこの二つのテーブルはレコードを履歴として保持しており、ある時点の最新のレコードを取得する必要があります(PKの内、ある1項目がMAXなものを取得する想定)。 件数が件数なのでまともな時間で返ってくるかという懸案があり、どのように実装を進めればパフォーマンス問題のリスクを抑えられるかを考えています。 SQLでjoinせずにテーブルをある時点の最新のレコードを別々に取得して、javaの処理でループして結合するなど・・・。 何かよい方法がありましたらアドバイス頂けないでしょうか。

    • ベストアンサー
    • Java
  • エクセル(vba)で教えてください。

    エクセル(vba)で教えてください。 vbaはほぼ初心者ですので、皆様のお知恵を拝借させてください 現在リストを作成しているのですが、最終更新日時を自動で取得するようにしてみたいのですが、うまくいかないです。 リストは列(項目)固定で、最終行に追加していくというものです。 1カテゴリ=1行での入力になります。 例えば、A,C列の項目のみ記入すると、その行のL列に自動で日時が入力される。 また翌日ブックを開いても、その日時は最終入力日のままだが、追加でD列の項目を 入力すると日時も更新される、というものです。 説明が足りないかもしれませんが、どなたか詳しい方よろしくお願いします。