単位時間ごとのレコードのカウント
- 単位時間ごとにレコードの集計時間と集計数を表示する方法を教えてください。
- 以前、SELECT文で条件文を一秒ごとに設定した処理を試みましたが、長時間かかりました。
- 短時間でこの処理が行える方法があれば教えてください。
- ベストアンサー
単位時間ごとのレコードのカウント
time ---------------------------- 2006-12-01 00:00:00.323861 2006-12-01 00:00:00.710523 2006-12-01 00:00:00.963864 2006-12-01 00:00:01.45068 2006-12-01 00:00:01.512551 2006-12-01 00:00:02.17493 2006-12-01 00:00:02.731608 2006-12-01 00:00:02.873651 2006-12-01 00:00:03.398863 2006-12-01 00:00:03.438085 2006-12-01 00:00:03.833481 このようなレコードが格納されているテーブルに対して、例えば1秒ごとにレコードを集計してその集計時間と集計数を表示する といったことをどのようなSELECT文を作れば良いのでしょうか? SELECT COUNT (time) FROM table1 where ~ と書いて条件文を一秒ごとに設定した文を何度も繰り返し実行してみたのですが、処理を完了するのにかなり長い時間を要したのでこの方法は断念しました。 短時間でこの処理が行えるような文があったら教えてください。 お願いします。
- atobex2000
- お礼率92% (12/13)
- PostgreSQL
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
文章だけでは、いろいろな受け取り方ができます。 得たい結果例、やってみたことを具体的に示しましょう。 time列のデータ型を示すべきだし、PostgreSQLのバージョンも書いておき ましょう。 例えば、以下のように表示したいということですか? 時間帯___________________件数 2006-12-01 00:00:00 3 2006-12-01 00:00:01 2 2006-12-01 00:00:02 3 2006-12-01 00:00:03 3 timestamp型を使っているなら、to_char関数、group by句,count関数を組み 合わせるとできるのでは?
関連するQ&A
- 登録テーブル全てのレコードカウントについて
唐突で申し訳ありませんが、oracle の count について質問があります。 現在、複数のテーブルに各データ(レコード)が入っているのですが、 select 文でテーブル名を指定せず、登録されている全テーブルに対するレコード件数をカウントしたいのですが、どなたか教えていただけないでしょうか?よろしくおねがいします。。m(__)m <出力イメージ> TABLE_NAME COUNT(*) ------- ----- 商品名 1250 連絡先 8700
- ベストアンサー
- Oracle
- VB2010のSQLを使ったレコードカウント方法
VB2010にて他のシステムから出力したCSVファイルにアクセスして集計を行おうとしています。 重複を排除したカウントを得たいのですがうまくいきません。 (1) SQL = "SELECT DISTINCT 物品ID FROM …" だと目的のレコードを抽出できるのですがCOUNTを使って (2) SQL = "SELECT COUNT(DISTINCT 物品ID) AS 物品数 FROM …" とする『演算子がありません』とエラーが出て (3) SQL = "SELECT DISTINCT COUNT(物品ID) AS 物品数 FROM …" とすると値はですのですが(1)のレコード数と違う数が出てきます??? 素人の手探りでプログラミングをしているので動きの違いが分かりません ご教授お願いします。
- ベストアンサー
- Visual Basic
- 重複レコードを高速で取得するSQL
Access(mdb)から約2万件レコードのあるテーブルがあるとします。 列数は20ほど。 その中から、3つの列において重複しているレコードを取得したいのですが、 高速に取得する方法はありますでしょうか? (VB.NETで、重複レコードをユーザーに示す処理を作成したいのです) 以下のSQLを試したところ、1分以上時間がかかってしまいました。 ----------------------------- SELECT * FROM テーブルA table1 WHERE EXISTS ( SELECT * FROM テーブルA table2 WHERE table1.列A = table2.列A table1.列B = table2.列B table1.列C = table2.列C GROUP BY table2.列A HAVING COUNT(table2.列A) > 1 ) ----------------------------- アドバイスをお願いします。
- 締切済み
- Visual Basic
- カウント結果を1レコードの中で横に並べたい
カウント結果を1レコードの中で横に並べたい 以下のテーブルを、 test_table id group name 1 100 テスト1 2 100 テスト1 3 100 テスト1 4 200 テスト1 5 200 テスト1 6 200 テスト2 7 200 テスト2 8 200 テスト2 9 200 テスト2 nameごとのカウント、更に100だけのカウント、200だけのカウントといったように、 以下のように横に並べることは可能でしょうか? name 合計 100計 200計 テスト1 5 3 2 テスト2 4 0 4 まず、nameごとの合計を取得するクエリを作って、 それに、100計列、200計列の部分をサブクエリでもってきたのですが、 これで動くには動くんですが、このやり方しかないものでしょうか。 ご教示おねがいします。 SELECT t.name, COUNT(*) as '合計', (SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '100' ) as '100計', (SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '200' ) as '200計' FROM test_table as t WHERE 1 GROUP BY t.name;
- ベストアンサー
- MySQL
- 複数のテーブルの レコード件数所得
sql初心者です。 php sql4.1を使って テーブルA・テーブルBの総レコード件数を所得がうまくできません。 テーブルAの◇◇が○○の含むレコード件数を所得は SELECT count(*) FROM テーブルA WHERE ◇◇ LIKE ○○ でできました。 テーブルA・テーブルBの◇◇が○○の含むレコード件数を所得はどうすればいいのでしょうか? よろしくお願いいたします.
- ベストアンサー
- MySQL
- LIKEを使用したレコード抽出について
OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1 COL2 -------------- ABC== 12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC=='; ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。
- 締切済み
- Oracle
- レコードが追加できない
SQL-Server2010を使用しています。 レコードを追加する際にキー項目が存在する場合は追加しないようなSQL文を作成しました。 追加するテーブルにレコードが1件以上あれば思ったとおりの処理となりますが、 1件も存在しない場合は追加できません。 下記がそのSQL文です。 原因と対策方法を教えて頂けませんでしょうか? INSERT INTO foo(商品コード, 商品名) SELECT DISTINCT 'ABC123' , 'りんご' FROM foo WHERE NOT EXISTS( SELECT * FROM foo WHERE 商品コード = 'ABC123' ) 以上です。 宜しくお願い致します。
- ベストアンサー
- SQL Server
- レコード数が増えすぎた場合の対処
例えば極端な例ですが、5000万人の会員のデータがmemberテーブルに入っていた場合 5000万行の中から特定の会員のレコードを探すのは時間が掛かると思うので select * from member where user_id = $user_id; 50万人ごとにテーブルを新たに作ってデータを格納した方がクエリの実行時間も早くなり負荷軽減に繋がるといえますでしょうか? user_idが1~50万は テーブルmember_1 $table = member_1; user_idが50万~100万は テーブルmember_2 $table = member_2; select * from $table where user_id = $user_id; 大手会員制サイトは、膨大な会員データをどのように格納しているのでしょうか。 ご教示頂けると幸いです。 宜しくお願い致します。
- ベストアンサー
- MySQL
- DELETE文とロックについて
DELETEしようとしているレコードがロックされている場合は、削除せず すぐに処理を戻したいです。イメージ的にNOWAITが最適と思い →DELETE FROM テーブルA WHERE カラムA = 'A' NOWAIT としたいところですが、NOWAITはSELECT文でしか指定できないとのことなのでNGです。 SELECT文で抽出した条件のレコードを削除する場合 →DELETE FROM テーブルA WHERE カラムA = (SELECT カラムA FROM テーブルA WHERE カラムA = 'A') と出来ます。 又、SELECT文でロック待機時間なしの場合 →SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT と出来ます。 これらを組み合わせて、ロックされているレコードを削除しようとした場合、 すぐにNGで制御を戻すように、次のように記載してみました。 →DELETE FROM テーブルA WHERE カラムA = (SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT) なぜかNGになってしまいます(右カッコがありませんと言われます)。 なぜこの書き方が出来ないのでしょうか? 現在、一度該当のレコードをSELECT文でFOR UPDATE NOWAITをしてから DELETEをしています。 1つレコードを削除したいだけなのに、わざわざSELECT文と DELETE文を発行してしまっています。 こういう場合、他にどのような方法があるのでしょうか? 宜しくお願いします。
- ベストアンサー
- Oracle
- 異なるテーブルのレコード削除
オラクル初心者です。宜しくお願いします。 AAA、BBB、CCCというテーブルがあると仮定します。 画面から入力された値(ddd)をキーとして、CCCテーブルから該当するレコードをセレクト文で引っ張り、eeeという値を抜き出したとします。 そのeeeという値をキーにAAA、BBBテーブルのレコードを削除するにはどういうSQLを発行すればよろしいでしょうか? "delete from AAA, BBB where eee = (select eee from CCC where fff = ddd);" では駄目でした。 質問が下手でわかりにくいかもしれませんが、どうかご教授お願いします。
- ベストアンサー
- Oracle
お礼
できました! ありがとうございます!