• ベストアンサー

WHERE句かHAVING句の書き方

qbr2の回答

  • ベストアンサー
  • qbr2
  • ベストアンサー率50% (62/123)
回答No.2

じゃぁ、havingで。 select id,max(time) from table group by id having max(time)<='17:00'

koke29
質問者

お礼

回答ありがとうございます! 自分の環境に書き直して、動作OKでした 私がHAVINGで試した時には、BETWEENを使ってみたのですが BETWEENよりは、大小比較でやっちゃった方がシンプルですかね? (ちなみにその時のコードでは動きませんでした) 直感的な書き方で動作の理解がしやすかったので qbr2様のコードを採用させて頂くことにしました 追加質問をしてみたので、しばらく待ってから質問締めさせて頂きますね

関連するQ&A

  • SQL WHERE, HAVING について

    こんにちは。さっそくですが、 白男川 恵さん著作による 「Oracle Master Bronze 演習問題 SQL基礎I」 の問95について質問させていただきます。 問題文 CAT_ID列の値が20であるPRICE列の最大値を求めたい。 実行すべきSQL文として正しいものを選びなさい。 とあり、正解は (B) SELECT cat_id, MAX(price) FROM itemlist HAVING cat_id = 20 GROUP BY cat_id (C) SELECT cat_id, MAX(price) FROM itemlist WHERE cat_id = 20 GROUP BY cat_id なのですが、 WHERE句の使用法としては 大体の場合 WHERE (ターゲット) = (値) となると思うのですが、ターゲットのところが グループ関数でないのでこの場合は正解としてもよい、 ということでしょうか? 以下のサイトを別のタブで見ていただきたいのですが、 http://www.atmarkit.co.jp/fdb/rensai/tsql05/tsql05_1.html 「WHERE句とGROUP BY句を併用した場合、 WHERE → GROUP BYの順でクエリが評価されるため、 グループ化された結果をWHERE句の段階で利用できないのです。」 「HAVING句とGROUP BY句を利用した場合、 GROUP BY → HAVINGの順でクエリが評価され、 グループ化された結果に対し条件を指定することが可能です。」 http://www.atmarkit.co.jp/fdb/rensai/tsql05/tsql05_2.html 「HAVING句はGROUP BY句によってグループ化が行われたデータに対し、 絞り込みの条件を指定できます。 このため、絞り込み条件に集計関数を含めることが可能です。」 この設問の場合には WHERE→GROUP BYの順でも GROUP BY→HAVING の場合でもWHERE のターゲットがグループ関数で得られた値 で条件指定するわけではないので文法的にも正しく おなじ結果が得られる こういう解釈でよろしいのでしょうか? ご存知の方、教えていただけないでしょうか? よろしくお願いします。

  • SQL HAVING句の使い方について

    以下のテーブルAとテーブルBを結合して結果テーブルを出力したいと考えています。 (テーブルA上のIDのカウントした数をテーブルBに結合して出力したい。) テーブルA ----------- CATE ID aaa 001 bbb 001 ccc 003 ddd 004 テーブルB ----------- ID NAME 001 101 002 102 003 103 004 104 結果テーブル ---------------------- ID NAME COUNT 001 101 2 002 102 0 003 103 1 004 104 1 そこで、 =================================== SELECT B.ID, B.NAME, COUNT(A.ID) FROM TABLE_A B, TABLE_B B GROUP BY B.ID, B.NAME, A.ID HAVING A.ID = B.ID =================================== とSQLを書いてみましたが、 002 102 0 のテーブルAにIDが存在していない列が結果として表示されませんでした。 WHERE句でいう「WHERE A.ID =* B.ID」のようなことを行いたいのですが、どのように行えばよいでしょうか? よろしくお願いいたします。

  • HAVING句でのBETWEEN演算子

    HAVING句でのBETWEEN演算子の使い方について教えていただけますでしょうか。 MS SQL SERVER のフロントエンドとしてMS ACCESS でパススルークエリを作成中です。 以下のようなテーブルがSQL SERVERにあります。 ID    TIME AAA   2005/06/01 00:00:10 BBB   2006/02/01 00:00:10 CCC   2006/03/01 00:00:10 AAA   2006/02/01 00:00:10 BBB   2006/02/02 00:00:10 CCC   2006/03/02 00:00:10 MS ACCESS パススルークエリで以下のようなSQL文を作成しました。 SQL文 SELECT ID, TIME FROM JOB WHERE TIME between '2006/01/01 00:00:00' and '2006/02/15 23:59:59' 結果 ID    TIME BBB   2006/02/01 00:00:10 AAA   2006/02/01 00:00:10 BBB   2006/02/02 00:00:10 抽出条件は TIME between '2006/01/01 00:00:00' and '2006/01/31 23:59:59' のままとし、IDをグルーピングしたいと思い以下のように書き換えましたが正しい記述では無いようでエラーとなってしまいます。 SELECT ID, TIME FROM JOB GROUP BY CODE HAVING TIME between '2006/01/01 00:00:00' and '2006/01/31 23:59:59' ORDER BY ID 欲しい結果 ID AAA BBB 正しい記述を教えていただけますでしょうか。 よろしくお願いいたします。

  • WHERE句に複数テーブルを使いたい

    アクセス2010です。 テーブルA F1__テキスト(重複あり) F2__数字 テーブルB F1__テキスト(重複なし) F2__Boolean 条件 ・テーブルAのF2が1の条件で ・テーブルAのF1にテーブルBのF2がない ・テーブルBのF2がTrueであるものだけ DoCmd.RunSQL INSERT INTO テーブルA(F1,F2) SELECT テーブルB.F1,100 FROM テーブルB WHERE テーブルA.F2 = 1 And テーブルA.F1<>テーブルB.F1 And テーブルB.F2 = True; WHERE句に複数テーブルを使いたい時は、どのようにするのでしょうか?

  • ORACLEでwhere句の検索順序

    Oracle9i windows2000です。 以下のようなテーブルがあります。 table_a ----------------------- id   NUMBER(10,0) NOT NULL, sort   NUMBER(10,0) NOT NULL, name   VARCHAR(10), text   VARCHAR(255) この条件で、以下のふたつのSELECT文を発行した時、パフォーマンスが良いのはどちらですか? Oracleでは後ろから検索されると聞いたことがあるのですが本当でしょうか? ※idにプライマリキー、 id,sortにインデックスが貼ってあります。 (1)SELECT text FROM table_a WHERE id = 1 AND sort = 2 AND name = 'a' (2)SELECT text FROM table_a WHERE name = 'a' AND sort = 2 AND id = 1

  • SELECT文のWHERE句についてご教授下さい。

    SELECT文のWHERE句についてご教授下さい。 ┏━┳━━━━┳━━━━┳━━━━┳━━━━┓ ┃No┃パターン_┃データA__┃データB__┃データC__┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃01┃001_________┃P1だけ___┃NULL_____┃共通________┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃02┃001_________┃P1のみ___┃NULL_____┃共通_______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃03┃002_________┃NULL_____┃P2だけ___┃NULL______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃04┃002_________┃NULL_____┃P2のみ___┃共通_______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃05┃002_________┃NULL_____┃P2のみ___┃NULL______┃ ┣━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃06┃003_________┃HOGE11_┃NULL______┃共通_______┃ ┗━┻━━━━┻━━━━┻━━━━┻━━━━┛ 上記のようなテーブル構造のデータがあり、 それぞれのカラムに対して検索できるWebの画面があります。 以下の要件を満たすSELECT文はどのように作成すればよいでしょうか? パターン「001」の場合だけ、データA列を検索条件に加える。 パターン「002」の場合だけ、データB列を検索条件に加える。 全パターン共通して、データC列は検索条件に加える。 【具体例】  以下の検索条件が指定された場合は、No「01と04と06」がHITする。   パターン=「001、002、003」   データA=「P1だけ」   データB=「P2のみ」   データC=「共通」

  • select文のwhere句に配列を入れて検索したい

    こんばんは。 題名の通り、select文のwhere句に配列を入れて検索したいのですが、 同じ質問↓も見つけ、やってはみるのですがうまくいかないので、教えてください。 http://oshiete1.goo.ne.jp/qa2940474.html 現在、 $member_id という配列にデータを入れ(この配列には正しく値が入っています。) $sql = "SELECT * FROM テーブル名 WHERE id IN (".$member_id."); としているのですが、うまくいきません。 どこがおかしいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL WHERE句 分岐?

    SQL Server 2005 を使っております。 WHERE句の分岐といいますか、記述の方法がわからないのですが、下記がその部分になります。 下記のコードを実行すると、都道府県、血液型、両方に何かしらのデータが入っているものしか抽出してきません。都道府県、血液型、どちらかの値がNullの場合でも、どちらかの条件が合致していれば、抽出したいのですが、どう記述すればよろしいでしょうか? 下記のコードが Null = Null を認識していれば このコードでも抽出してくるんでしょうが、 Null = Null だと抽出しないんですね。 何卒よろしくお願いいたします。 WHERE (IsNull(@A,dbo.テスト.都道府県) = dbo.テスト.都道府県) AND (IsNull(@B,dbo.テスト.血液型) = dbo.テスト.血液型

  • updateのWHERE句にサブクエリーを書く事は不可?

    同じテーブルに対し、サブクエリーを使用して 更新することは可能でしょうか? test 1 である条件にマッチしたIDに対し、 フラグを書き換えたいのですが・・動作しませんでした。 update test1 set flg = 0 WHERE test_id = ALL (SELECT test_id FROM test1 WHERE flg = 1 AND a = 0) #1093 - You can't specify target table 'test1' for update in FROM clause

    • ベストアンサー
    • MySQL
  • group by とhaving

    こんにちは。 グループ化した後に条件で摘出する方法について教えて頂けますでしょうか。 例えば、以下のようなテーブルを作ったとして、 テーブル id tag_no 1 5 1 6 1 7 1 8 1 9 2 5 2 10 2 11 3 5 3 9 3 10 指定したtag_noを持つidを摘出したいのですが、tagnoを複数指定するのにはどのようにしたらよいのでしょうか・・・。 select table from group by id having tag_no = 5 and tag_no = 9; として、 idの1と2を取り出す・・・といったことをやりたいのですが、 実際にやってみるとempty setとなります。 このテーブルで無理ならテーブルの変更もありなのですが、 一晩悩んでも思い浮かばず・・・。 mysqlはvar5.5です。 お力添えをよろしくお願い申し上げます。

    • ベストアンサー
    • MySQL