日時範囲でグループ化された最大値を取得する方法

このQ&Aのポイント
  • 任意の日時範囲を指定して、一日単位で集計された端末IDと計測値の最大値を取得する方法について教えてください。
  • データをモニタリングするシステムがあり、データはMS SQL Serverに保存されています。特定の日時範囲で集計された最大値を取得する方法を教えてください。
  • 困っていることは、日時範囲でグループ化されたデータの最大値を取得する方法です。DBに詳しくないので、助けていただきたいです。
回答を見る
  • ベストアンサー

日時範囲でグループ化された最大値

任意の時刻にデータをモニタリングしているシステムがあり、データがMS SQL Serverに保存されています。 int ID int DeviceID 端末番号 int DeviceValue 計測値 smalldatetime DeviceTime 日時 これを、任意の日時範囲を指定し、一日単位で集計された、端末ID、計測値の最大値という形式で取得したく思います。 計測日 端末番号 計測最大値 2012/01/01 10002 34543 2012/01/01 10003 33211 2012/01/02 10002 23450 ... ... DBが得意でないため、困っています。 どなたかお助けいただけないでしょうか?

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

select cast( DeviceTime as date ) as 日時, DeviceID as 端末番号, max(DeviceValue) as 計測最大値 from テーブル名 group by cast( DeviceTime as date ), DeviceID order by 日時,端末番号

関連するQ&A

  • PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方

    PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方法を教えてください。 table_a id start end ----+--------------------+---------------------+ 001 2010-01-01 10:00:00 2010-01-03 18:30:00 002 2010-01-01 12:00:00 2010-01-05 20:00:00 ・ ・ というデータがある時、 現在の日時がid:001のstartとendの間だったら1、 start前だったら0、endより後だったら2の値を表示させるにはどうしたらいいのでしょうか? $sql = "SELECT A.id ,A.start ,A.end FROM table_a A WHERE A.id = ".$id." "; $result = mysql_query($sql); で取得して time()などと比較すればいいとは思ってますが、DBから持ってきた日付との比較方法がわかりません。

    • ベストアンサー
    • PHP
  • 【アクセス2010】フィールドの最大値のみ表示

    アクセス2010を使用しています。 下記のようなテーブルがあり、クエリを使ってそれぞれの「ID」に紐づいている「区分」の最大値のみを表示させたいです。 ID 区分 年月 10 100 2011/1/1 10 110 2011/3/8 10 150 2015/4/1 13 110  13 140  21 140 2016/12/7 21 160 2017/7/7 21 150 2017/1/8 「年月」を最大で集計すると、年月が入っていないIDが重複して出てきてしましますが、 「区分」を最大で集計しても、すべてのデータが表示されます。 アクセスを触り始めたばかりなので、詳細に(どこを押す、どの欄になにを書く等)教えていただけますととても助かります。 よろしくお願いいたします。

  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • グループ毎にある列の最大値のレコードを取得する方法

    Accessで下記のようなテーブルでkeyフィールド毎のdayフィールドの最大値のレコードを取得したいと思ったのですが、keyフィールドとdayフィールドのみを表示する分には下記の記述で大丈夫かと思ったのですが、これにidフィールドとfieldフィールドもあわせて表示したい場合、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、出来れば同じkey,同じdayが複数あった場合、一番大きいid(主キー)のレコードを取得したいと思っています。 【テーブル(T_TBL)】 id|key|day|field ------------------ 1|1|     |100 2|2|2011/03/04|400 3|2|2011/03/03|500 4|3|2011/03/10|300 5|3|2011/03/10|200 【下記ソース実行時のメッセージボックスの表示結果】 1 : 2 : 2011/03/04 3 : 2011/03/10 【希望する表示結果】 1 : 1 : : 100 2 : 2 : 2011/03/04 : 400 5 : 3 : 2011/03/10 : 200 【ソース】 Option Compare Database Option Explicit Private Sub Form_Load() Dim db As DAO.Database Dim rs As DAO.Recordset Dim SQL As String Dim strMsg As String Set db = CurrentDb() SQL = "" SQL = SQL & "SELECT key, Max(day) AS max_day" SQL = SQL & " FROM T_TBL" SQL = SQL & " GROUP BY key" Set rs = db.OpenRecordset(SQL) Do Until rs.EOF strMsg = strMsg & vbNewLine & rs!Key & " : " & rs!max_day rs.MoveNext Loop MsgBox vbNewLine & strMsg rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub 以上、よろしくお願いします。

  • 日時のデータ型について

    お世話になります。 SQL Serever 2008 Standard イントラにてブラウザを介してDBへアクセスしております。 日時を登録するときに、yyyy/mm/dd hh:mm形式で登録させたいのですが、テーブルの該当フィールドのデータ型がdatetimeだと秒まで登録されてしまいます。 上記フォーマットでの登録は無理なのでしょうか。 ※テーブルには文字列として登録するのではなく、ちゃんと日時で登録したいところです。 ご教授の程、宜しくお願い致します。

  • グループ内最大値に印を付けるSQL文

    MySQL5 に年度、通し番号が 格納されており、 select year, number from mytable ・・・と抽出すると以下のようになります。 2005 1 2005 2 2005 3 2008 4 2008 5 2008 6 2008 7 2008 8 2010 9 2011 10 2011 11 2011 112 同じ年度グループ内で、最大となる通し番号の行に「myFlg =1」と付けるSQL文をご教示ください。if とか group by とか as myFlg =1 みたいな記述をするのかなと想像するんですが・・・ PHP5のWHILE文でmyFlg = 1となっている行だけを出力し、上記データ例では、 while ($col = mysql_fetch_array($rst)) { if ($col['myFlg']) == '1') { echo $col['year'] . "年の最大番号は、" . $col['myFlg']. "番"; } } を実行することで、以下のような結果を得ることを期待しています。 2005年の最大番号は、3番 2008年の最大番号は、8番 2010年の最大番号は、9番 2011年の最大番号は、112番 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 配列中にあるデータの最大値を求めたい

    BBSを改変したエントリーフォームで、 アンケート付のイベント参加集計をしています。 設置者が居なくなってしまったため引き継いでいるのですが、 力不足で行き詰まっています。お力をお貸し下さい。 1.現状 入力項目は50個ほどあり、データファイルには、 1行目にデータ項目、2行目以降に入力データが追加されていきます。 例)データ形式 申込日時,イベント名,,,,受理番号,,その他(改行) 20120117,ハイキング,,,,20120505001,,特になし(改行) 2.やりたいこと 管理の都合上、受理番号を発行させたいのですが、 既参加者に発行した受理番号の最大値の取得方法が分かりません。 受理番号はイベント毎に初期値を設定し、連番にしていきます。 例)1人目…20120505001 (初期値)   2人目…20120505002 (上8桁の20120505をイベントコードとし、下3桁が連番) 受理番号項目が入力項目50個の45番目にあったとして、 1人目はあらかじめ設定してあった初期値を入力、 2人目以降は受理番号の最大値をはじき出し、最大値+1を入力 という処理をしたいのです。 ※受理番号の入力位置は45番目がベストですが、 処理が複雑になるようなら、先頭でも末尾でもかまいません。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 集計するためのSQL構文を教えて下さい。

    初めて投稿します。よろしくお願いします。 現在、ストアドプロシージャとSQLの勉強をしながら作業を行なっています。そのため説明不足などありましたらご指摘願います。 [環境]  データベース:SQLServer2005  SQL作成環境 :SQLServerManagementStudioExpress(9.00.2047.00) 望んでいる出力結果 病室,タイプ,10/01水,10/02木,10/03金,10/04土,10/05日 -------------------------------------------------------------- 10,集合3,○○太郎,○○太郎,○○太郎,○○太郎,□□花子        △△太郎,△△太郎,□□花子,□□花子        □□花子,□□花子 11,個室A,          ××太郎,××太郎,××太郎 12,個室B,     ○○次郎,○○次郎,○○次郎,○○次郎 ※指定した日付範囲で、全病室を対象に入院中患者、入院予定患者を  病室単位で求めたいです。 関係するテーブル情報 ※マスタテーブルは、名称+Mで表記します。 ※データテーブルは、名称+Tで表記します。 [病室] 病室M(  病室番号 INT  タイプコード INT ) [日付] ストアドのパラメータで集計開始日と終了日を受け取るため、 その集計範囲も動的に変わります。 ※上記の結果では、  集計日(自):2008/10/01  集計日(至):2008/10/05 を受け取った場合を想定し記述しています。 [入院者氏名] 患者T(  患者コード INT  患者氏名 VARCHAR(128)  通院種別 TINYINT(1:通院,2:入院)  退院区分 TINYINT(1:入院,2:退院)  入院日 SMALLDATETIME  退院日 SMALLDATETIME ) [患者と病室を紐付けるテーブル] 病室割当T(  割当番号 INT  患者番号 INT  病室番号 INT ) 長文となり申し訳ありません。 上記の情報でストアドを組もうとしているのですが、 SQL含め勉強不足な状態です。 実現するための考え方、方法、アドバイス等を頂きたいです。 よろしくお願い致します。

  • MySQL 最大値のレコードの特定

    SQLが上手く作れないためお知恵をお貸し頂ければ幸いです。 articleテーブルに存在するユーザの一覧に、記事の投稿件数、記事に含まれるsizeの最大値、最大値が投稿された記事の登録日時、記事のタイトルを加えたものを抽出したいです。 [ article ] article_id user_id size insert_unixtime title ---------------------------------------------------------- 1 100 18 20130101 aaaaaaaaaaaa 2 100 10 20130102 bbbbbbbbbbbb 3 100 18 20130103 cccccccccccc 4 200 11 20130201 dddddddddddd ↓↓希望する抽出結果↓↓ article_id user_id count max_size insert_unixtime title ---------------------------------------------------------- 3 100 3 18 20130103 cccccccccccc 4 200 1 11 20130201 dddddddddddd 自己結合等で、ユーザ毎の最大sizeを抽出してそれに該当するレコードを探すことであるていどはできたのですが 最大sizeが複数あった場合に、両方のレコードを取得してしまいます。(上記の例では、article_id 1と3を抽出してしまう。 ※最大sizeが複数会った場合はinsert_unixtimeが大きい方のタイトルを表示したい。 うまく1SQLで抽出できないでしょうか。

  • MySQLのselect文で、最大ID値のデータを呼び出す

    MySQLのテーブルのフィールド名として「ID」を登録しています。(型はint) そこで、select文で最大ID値のデータを呼び出すにはどうすればいいのか教えて頂けないでしょうか? select * from tableA ?????;

    • ベストアンサー
    • MySQL