指定日の時間毎に最多出現する項目の中から最新日時を持った行のみを取得したいのですが
以下の内容では不要な行が出てしまいます。

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】を使用しています。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

あまりいい書き方ではないかもしれませんが・・・



http://ideone.com/uJHuJ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ただ今SQLを確認中です。
提示した期待例はOKでしたが、
INNER JOINを利用したため
いくつかのテーブルを結合できず
0件となってしまいました。

各SELECTにWHERE区で期間の条件を加えると
期待した内容になるようですが
使い方は合っていますでしょうか?

※そもそもテーブルには分単位でINSERTし
60分×24時間×365日×N年という情報を
記述しなかった私に問題がありましたね。
申し訳ありません。

お礼日時:2011/04/21 00:58

とりあえず、中間回答ということで


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だと上記の結果を元にもう一度結合処理するぐらいしか思い当たりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ただ今SQLを確認中です。
提示した期待例はOKでしたが、
テーブル結合に難があるようで
上手くデータが入らない箇所があるようです。
やはりWHERE句の条件が無いからでしょうか。

※そもそもテーブルには分単位でINSERTし
60分×24時間×365日×N年という情報を
記述しなかった私に問題がありましたね。
申し訳ありません。

お礼日時:2011/04/21 01:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAMD製CPUの性能比較サイト

AMD製CPUの性能を数値で一覧で比較しやすいサイトはありますでしょうか?
INTELの比較サイトはあったのですが、AMDは見つかりません…。
おおまかな比較でもかまいません。

異なるCPUの性能は単純に比較できない事は分かっています。
ですが、性能を細かく正確に知りたいワケではなく、おおまかに位置付けを感覚的に把握したいので、強引にでも杓子定規でも何でも、性能を数値化してCPUの種類を超えて、ある程度過去から現在にかけてのCPU性能を比較しているサイトが好ましいです。
具体例として、このような比較表のサイトが望ましいです。

INTELのCPUの比較表のサイト
http://maximums.gatt.nobody.jp/cpu.html
GPUの性能比較
http://mizushima.ne.jp/topic/GPU-benchmark/index.php

今回はAMDの過去から現在にかけてのCPU性能を比較しているサイトを質問していますが、分かりやすいINTELとAMD製CPU比較サイトもありましたらよろしくお願いします。

AMD製CPUの性能を数値で一覧で比較しやすいサイトはありますでしょうか?
INTELの比較サイトはあったのですが、AMDは見つかりません…。
おおまかな比較でもかまいません。

異なるCPUの性能は単純に比較できない事は分かっています。
ですが、性能を細かく正確に知りたいワケではなく、おおまかに位置付けを感覚的に把握したいので、強引にでも杓子定規でも何でも、性能を数値化してCPUの種類を超えて、ある程度過去から現在にかけてのCPU性能を比較しているサイトが好ましいです。
具体例として、このよう...続きを読む

Aベストアンサー

>INTELのCPUの比較表のサイト
>http://maximums.gatt.nobody.jp/cpu.html
ここにAMDも載っているのですが、これではダメなのでしょうか。

Q番号が同じで指定日より小さい最新の日付

access2002

部署、社員番号、社員の入社日、現部署への配属日のテーブルがあります。
busho,staffID,nyushaDate,haizokuDate
00001,1010100,2000/01/01,2000/01/01
00001,1010101,2000/04/01,2006/04/01
00001,1010102,2006/04/01,2007/04/10
00002,1010103,2000/04/01,2000/04/01
00002,1010104,2000/04/01,2006/04/01
00002,1010105,2006/04/01,2006/04/08
00003,1010106,2000/01/01,2000/01/01
00003,1010107,2006/01/01,2007/04/01
00003,1010108,2007/04/01,2007/10/01

このテーブルから指定した日付以前の入社日で各部署の最新の配属者を抽出したいと思っています。
例えば、2006年1月1日で検索すると
00001,1010101,2000/04/01,2006/04/01
00002,1010104,2000/04/01,2006/04/01
00003,1010107,2006/01/01,2007/04/01
という結果を望んでいます。

まず以下のようなクエリを作成しました。
SELECT T.busho, T.staffID, T.nyushaDate, Max(T.haizokuDate) AS haizokuDateの最大
FROM T
GROUP BY T.busho, T.staffID, T.nyushaDate
HAVING (((T.nyushaDate)<=[検索日?]));
しかし結果は、
00001,1010100,2000/01/01,2000/01/01
00001,1010101,2000/04/01,2006/04/01
00002,1010103,2000/04/01,2000/04/01
00002,1010104,2000/04/01,2006/04/01
00003,1010106,2000/01/01,2000/01/01
00003,1010107,2006/01/01,2007/04/01
となり配属最新日が抽出できませんでした。

次に過去ログをいろいろ調べて、以下のようなクエリを作成しました。
SELECT T.busho, T.staffID, T.nyushaDate, T.haizokuDate
FROM T
WHERE (((T.nyushaDate)<=[検索日?]) AND ((T.haizokuDate)=(SELECT MAX(haizokuDate) FROM T AS B WHERE T.busho=B.busho)));
しかし今度は、何も表示されませんでした。

何が間違っているのでしょうか。
どのようにすれば望む結果が得られるのでしょうか。
よろしくお願いします。

access2002

部署、社員番号、社員の入社日、現部署への配属日のテーブルがあります。
busho,staffID,nyushaDate,haizokuDate
00001,1010100,2000/01/01,2000/01/01
00001,1010101,2000/04/01,2006/04/01
00001,1010102,2006/04/01,2007/04/10
00002,1010103,2000/04/01,2000/04/01
00002,1010104,2000/04/01,2006/04/01
00002,1010105,2006/04/01,2006/04/08
00003,1010106,2000/01/01,2000/01/01
00003,1010107,2006/01/01,2007/04/01
00003,1010108,2007/04/01,2007/10/01

このテーブルから指定...続きを読む

Aベストアンサー

SELECT T1.*
FROM T T1
WHERE T1.nyushaDate<=[検索日?]
AND NOT EXISTS
( SELECT 1 FROM T T2
WHERE T1.busho = T2.busho
AND T2.nyushaDate<=[検索日?]
AND T1.haizokuDate < T2.haizokuDate );

Q最新のCPUについて

デスクトップパソコンをVistaに合わせて新しく組み立てたいと思っています。
PCショップのサイトを見てみると何種類かの高性能CPUがありますが、
知識が乏しいためどれを選択すればよいのか分りません。

そこで皆さんにお尋ねしますが、
あなたならどの最新高性能CPUを選択しますか?

条件は
インテル製CPU  ( AMD製CPU不可 )
デスクトップPC用
最新高性能
マルチCPU
X64対応 
予算制限なし です。

また、そのCPUに適合した、おすすめマザーボードがあれば教えてください。

http://www.faith-go.co.jp/lists/itemlist_parts.asp?cid=00001&fl=3,1,5,2&hid=i
こちらのサイトも参考にしてください。

多数のご意見をお待ちしています。

Aベストアンサー

CPU
Core 2 Extreme Conroe LGA775 FSB1066 L=4MB
(Core2 Extreme X6800):\129,800


マザーボード
ASUS:Striker Extreme \47,800
http://www.asus.com/products.aspx?l1=3&l2=11&l3=397&model=1439&modelmenu=2

QORACLEでLONG項目からCHAR項目へ桁数指定で文字列を抽出

ORACLEでLONG項目からCHAR項目へ桁数指定で文字列を抽出したいのですが、方法はありますか?
LONG項目の先頭から30桁分の文字を抽出し、CHAR項目に入力したいのですが。

会社で使用しているERPパッケージでLONG項目があり、どうしてもこの項目から文字が抽出したいのです。

回答のほど宜しくお願いします。

Aベストアンサー

ちょっと質問の意図がわからないのですが、
例えば、T1,T2の2つのテーブルがあったとして、
T1のnumというnumber(10)の項目があって、その中から
先頭の5桁を取ってきて、T2のcommentというCHAR(5)の
項目に転送するなら、
まず、T1のnumから5文字取ってきて、それを変数hoge[chr(5)]に入れる。

select substrb(to_char(num),1,5) into hoge from t1 where id=1;

それから、hogeをT2のcomment列に挿入する。

insert into t2(id,comment) values (1,hoge);

んで、最後にcommitしたらOKです。

こんなもんでよかったでしょうか?

QパソコンのCPUを最新のものに変えようと思うのです

パソコンのCPUを最新のものに変えようと思うのですがウチのパソコンで使える最適なCPUはなんでしょうか教えてください

マザーボード  hewlett-packard 08b8h
メモリ      3GB
HDD       500GB
グラフィックカード   NVDIA Quadro FX 3450/4000 SDI
CPU        Intel Xeon CPU 3.80GHz
電源       500V

また、おすすめのCPUなどありましたら 教えてください

Aベストアンサー

XW6200ですね
当時のCPU Xeon3.8GHzが搭載されていますね CPUは2個付いていますか?
このパソコンはCPUが2個搭載出来ますよ 2個有る方が快適に動きます

メモリはPC-2 3200 ECC DDR-2 SDRAMが4GBまで搭載可能ですね

残念ですが メーカーのホームページを見るとCPUの交換は無理ですね(他に選べる早いCPUが無いです)
Windows7でも動くと思いますが メモリが上限4GBですから快適かは微妙です

私もXW8600を使っています CPU3.0GHz×2 メモリ8GB ハードディスク合計6個 グラフィックカード交換 Windows7 64bit等色々追加して快適に使っています
6年落ちぐらいの中古パソコンですが 多少の重い作業でも不満は無いですね

ワークステーションは丈夫ですから個人的には気に入っています 

xw6200 はHyper-Threadingはオフで出荷されます。BIOSまたはHP Hyper- Threading Management Utilityで簡単にオンに出来ます。
上記は試していますか?

XW6200ですね
当時のCPU Xeon3.8GHzが搭載されていますね CPUは2個付いていますか?
このパソコンはCPUが2個搭載出来ますよ 2個有る方が快適に動きます

メモリはPC-2 3200 ECC DDR-2 SDRAMが4GBまで搭載可能ですね

残念ですが メーカーのホームページを見るとCPUの交換は無理ですね(他に選べる早いCPUが無いです)
Windows7でも動くと思いますが メモリが上限4GBですから快適かは微妙です

私もXW8600を使っています CPU3.0GHz×2 メモリ8GB ハードディスク合計6個 グラフィックカード交換 Windows7 64b...続きを読む

QFileMakerで指定日から5日以内と10日以内

これまでAccessを使ってきましたが、最近FileMakerを使い始めて分らないことだらけです。
例えば、
(1)ある特定の日から遡ること5日以内のデータ一覧、と
(2)ある特定の日から遡ること10日以内のデータ一覧
が欲しいのですが、Accessなら、クエリを2つ作ってそれぞれwhere条件を設定すれば終わりですが、FileMakerの場合はどうやるのでしょう?
レイアウトを2つ作るのですよね?
グローバルフィールドを作成して、そこに特定日を設定して、リレーションで指定するのでしょうか?
だとしても、2つの異なった条件を指定できますか?
あるいは、全然違うのですか?

Aベストアンサー

Filemaker時々使いますが、確かに検索が分かりにくいですねえ。
少し発想を変えると、いろいろなアイデアが出てくるので、実際にはあまり困ったことはありません。
リレーションでもできなくはないですが、一致しかだめなのでやっかいです。

1) 計算フィールドによる方法
必要があれば特定日などのグローバルフィールドを作っておきます。
「日付5日以内」の計算フィールドを作り、条件に合う場合は1それ以外は0のような式を入れておきます。
次にスクリプトで、
検索モードに切り替え(ここで日付5日以内==1のような条件を設定しておく)
検索実行
をいれておき実行すると検索できます。

他にも検索条件のフィールドに計算した値をいれて検索する方法があります。手で検索条件を入れるのと同じ方法です。
検索条件には計算式を直接入力できませんので、スクリプトで計算しておかないといけません。
ちょっとややこしいので省略。

「Filemaker pro大全」という本があって、これが結構詳しいので重宝しています。
私自身はver8対応を持っています。7-9対応が新しいのかな。バージョンがちょっと古いですがほとんどそのまま使えます。

Filemaker時々使いますが、確かに検索が分かりにくいですねえ。
少し発想を変えると、いろいろなアイデアが出てくるので、実際にはあまり困ったことはありません。
リレーションでもできなくはないですが、一致しかだめなのでやっかいです。

1) 計算フィールドによる方法
必要があれば特定日などのグローバルフィールドを作っておきます。
「日付5日以内」の計算フィールドを作り、条件に合う場合は1それ以外は0のような式を入れておきます。
次にスクリプトで、
検索モードに切り替え(ここで日付5日以内==1...続きを読む

Qcpuの比較

最近はCPUがたくさんありますが、いまいち比較ができません。
インテルはクロック重視だし
AMDはIPC?(一サイクルに使うクロック?みたいな)重視なので、単純には比較できません。

そこで、もっと比較しやすい基準ってないんですか?
ベンチマークみたいな

そんなサイトがあれば、価格とパフォーマンスをみてcpu決められるんですが・・・

ちなみに同じことがグラフィックボードにもいえます。
nVIDIAとATIで比較できないし

Aベストアンサー

CPUの比較は色々なサイトで見つかりますよ。
例えば、これ↓
http://www.xbitlabs.com/articles/cpu/

ビデオカードならこれ↓とか。
http://www.xbitlabs.com/articles/video/

QAccess2003を使って、複数台ある貸出機を製造番号毎にまとめ最新のレコードだけを一覧表に表示させるには???

顧客所有の機械に不具合が生じた場合、その修理期間に顧客へ貸出す代替機の履歴をアクセス(Access2003)を使って管理しています。

ところが、次のような時はどのような方法を取ればよいのかわからなくて煮詰まっています。
よいアドバイスをいただきたいと思い投稿をさせていただきます。

次から代替機のことは貸出機と記します。

貸出機は20台あります。
その20台を複数のユーザーに貸し出しています。
台によっては5人に貸している機械もあれば、まったく貸出したことがない機械もあります。
それを貸出機の製造番号ごとにグループにまとめて、
そのうちの貸出日がもっとも新しいものを表示させたいのです。
レコード1件につき入力順によって貸出履歴IDを振っているので、
そのIDがグループの中で最新のものでもいいのです。
要は、製造番号ごとに貸出中なのか待機中なのか一目でわかればいいのです。

集計クエリで「貸出機製造番号」をグループ化にして、他の項目は先頭を使ってみましたが、この先頭と最後という集計方法はHDに記録した順番で変動してしまうので正しい情報を得ることが出来ませんでした。

関数やVBAなどを使ったら、解決されないでしょうか?

テーブルの構造は次のようになっています。
仮にテーブルAとします。
[フィールド名]・・・・・[データ型]
貸出機管理ID・・・・・・オートナンバー
ユーザNO・・・・・・・・・・テキスト型
貸出機製造番号・・・・・テキスト型
故障機製造番号・・・・・テキスト型
貸出日・・・・・・・・・・・・日付/時刻型
故障機受領日・・・・・・・日付/時刻型
修理発送日・・・・・・・・日付/時刻型
修理返却日・・・・・・・・日付/時刻型
故障機発送日・・・・・・・日付/時刻型
返却日・・・・・・・・・・・・日付/時刻型
担当者ID・・・・・・・・・・テキスト型
備考・・・・・・・・・・・・・・メモ型

上記のテーブルAに別のテーブルBからユーザ名を関連付けてクエリを作りたいです。
また、貸出日に日付があり返却日に日付がなければ"貸出中"、
貸出日と返却日の両方に日付が入っている、もしくは、まったく入ってなければ"待機中”という[現状]の表示をするフィールドをそのクエリ上に設けたいです。

そして、そのクエリを使って[貸出中]と[待機中]の一覧表が欲しいです。

なお、貸出機の製造番号は次のような形式になっています。
99XVC
00XVA
01XVB
製造年の西暦の下2桁+アルファベット3桁の組み合わせになっています。
1900年代から2000年代のものが混在しており、昇順に並べ替えたいので、並べ替える式のフィールドも設けています。


<クエリ>
フィールド名・・・・・・・・・テーブル
貸出機管理ID・・・・・・・・・テーブルA・・・ 
ユーザNO・・・・・・・・・テーブルA
ユーザ名・・・・・・テーブルB
貸出機製造番号・・・・・・・・・テーブルA→製造番号毎にグループにまとめる
故障機製造番号・・・・・・・・・テーブルA
貸出日・・・・・・・・・テーブルA
故障機受領日・・・・・・・・・テーブルA
修理発送日・・・・・・・・・テーブルA
修理返却日・・・・・・・・・テーブルA
故障機発送日・・・・・・・・・テーブルA
返却日・・・・・・・・・テーブルA
担当者ID・・・・・・・・・テーブルA
備考・・・・・・・・・テーブルA
機械の現状・・・フィールドに条件式を入れる
貸出機製造番号を並替えるためのフィールド・・・並べ替えの条件式を入れる

このような構造なのですが、皆様だったらどのような方法を取られますか?

製造番号毎に最新のレコードだけを表示させる所以外は問題なく解決されています。

この内容と似た質問を過去に何度か投稿させていただいています。
数名の方からいくつかの方法を教えていただき、試しているところですが、解決に至らず、より詳しい情報を載せて質問を再投稿させていただきます。
前の質問を締め切らない状態で、再投稿することは、お答えくださった回答者の方には大変、失礼なことをしており申し訳なく思います。
この場をお借りしてお詫びさせていただきます。

顧客所有の機械に不具合が生じた場合、その修理期間に顧客へ貸出す代替機の履歴をアクセス(Access2003)を使って管理しています。

ところが、次のような時はどのような方法を取ればよいのかわからなくて煮詰まっています。
よいアドバイスをいただきたいと思い投稿をさせていただきます。

次から代替機のことは貸出機と記します。

貸出機は20台あります。
その20台を複数のユーザーに貸し出しています。
台によっては5人に貸している機械もあれば、まったく貸出したことがない機械もあります。
...続きを読む

Aベストアンサー

>元のテーブルにはそれらの製造番号はあります。
これを製造番号でグループ化したもの(すべての貸出機の製造番号をリストにしたもの)をテーブルBとします。(別にクエリBでもかまいません)そして2番目のクエリを以下のように作り変えてください。

SELECT テーブルB.貸出機製造番号, テーブルA.貸出機管理ID, テーブルA.貸出日, テーブルA.返却日
FROM テーブルB LEFT JOIN (クエリA LEFT JOIN テーブルA ON クエリA.貸出機管理IDの最大 = テーブルA.貸出機管理ID) ON テーブルB.貸出機製造番号 = クエリA.貸出機製造番号;

一回も貸し出したことがないものは貸出機管理ID以下がブランクで表示されるはずです。 

テーブルのリレーションシップが理解できれば簡単な問題ですので、そのあたりを勉強されると良いと思います。

QCPUの性能比較サイトを教えて欲しい

Core2DuoとPenDとPen4とCeleronDの性能比較したグラフを以前どこかのサイトで見たのですが知っている方、おられませんでしょうか?
いくら探しても見つかりません。
また4種類のCPU比較ではなくても良いので、CPUのベンチマークなどの性能比較しているサイトがあれば教えてください。

Aベストアンサー

Tom's Hardware Guide Processors: CPU Charts 2006
http://www23.tomshardware.com/cpu.html?modelx=33&model1=430&model2=464&chart=173
他にもPCマーク、オフィスのベンチもあります
http://www.dosv.jp/feature/0610/05.htm

QAccess グループ毎に最新25件分で平均を出したいのですが

例えば表の項目に、[種別][日付][数]とあり、[種別]の設定値は重複可の場合。

種別毎の数の平均を出すのであれば、
SELECT [種別],AVG([数]) FROM 表名 GROUP BY [種別];
でOKですが、種別毎に最新の25件分で平均となると
どのようにすればよいか分かりません。

どなたか、教えていただけませんか。
よろしくお願いいたします。

Aベストアンサー

これでどうかな?

SELECT 種別, Avg(数)
FROM 表名
WHERE 表名.日付 IN
(SELECT TOP 25 日付 FROM 表名 AS 表名2
WHERE 表名.種別 = 表名2.種別 ORDER BY 日付 DESC)
GROUP BY 種別;

相関副問い合わせです。


人気Q&Aランキング

おすすめ情報