• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:分布を正確に取り出すには)

SQL Server2000で日付ごとの担当クラスと掃除箇所を取得する方法

このQ&Aのポイント
  • SQL Server2000で日付ごとの担当クラスと掃除箇所を取得するための方法を教えてください。
  • 同じ掃除箇所が定期的に回ってくるため、掃除箇所ごとに期間毎にデータを取得したいです。
  • お手数ですが、SQL Server2000の環境での実現方法をご教授ください。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

方法はいろいろあると思いますが、同じ掃除箇所を2つ以上のクラスが掃除することがないのであれば、 1)同じ掃除箇所について、その日以降最初に別のクラスが掃除した日を求める 2)それより前で最後に掃除した日を求める 3)グルーピングする という考え方がわかりやすいかと思います。 SELECT [クラス],[掃除箇所],MIN([日付]),MAXDATE FROM (SELECT [クラス],[掃除箇所],[日付], (SELECT MAX([日付]) FROM [掃除当番] WHERE [クラス]=t1.[クラス] AND [掃除箇所]=t1.[掃除箇所] AND [日付]<ISNULL( (SELECT MIN([日付]) FROM [掃除当番] WHERE [クラス]<>t1.[クラス] and [掃除箇所]=t1.[掃除箇所] and [日付]>=t1.[日付]),'2099/12/31')) MAXDATE FROM [掃除当番] t1) tmp GROUP BY クラス,掃除箇所,MAXDATE

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

関連するQ&A

  • エクセル 月火・木金・・・と2日ずつ日付を入れたい

    エクセル2007で、団地の掃除当番表を作っています。 掃除をするのは、月火と木金だけ、1軒が2日ずつ担当します。 例) 101 11/1・2 102 11/4・5 103 11/8・9 104 11/11・12   この日付部分を自動入力することはできないでしょうか?101号室に日付を入れると、1204号室まで日付が自動的に入るのが理想です。 今は、「101」と「11/1・2」2つのセルに入れていますが、日付が2つのセルにそれぞれ入るようでも構いません。 今回は手入力したのですが、毎年作るので簡単にできればと思いました。 よろしくお願いいたします。

  • ACCESSクエリーについて(条件抽出等3差分)

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136

  • クエリで行と行のデータ比較方法を教えてください

    SQL2005でクエリを走らせて調査したいので教えてください ●取引データ● ------------------------------ 企業 取引開始日 取引終了日 ------------------------------ A   20110610   20110612 A    20110701   20110710 B   20110401   20110403 B   20110408   20110421 B   20110701   20110701 とデータがあった場合、今回の取引開始日と前回の取引終了日を比較して3週間以内かどうかの調査をしたいのですが、クエリで一発で出す方法がないでしょうか? 検索して調査した結果、相関サブクエリで行えるのでは???と思い試しましたが構文がイケてないようで、思ったように出てきません。 相関サブクエリの意味があまり理解できないので助言をお願いいたします。 件数が多いので、とりあえずA企業だけでのクエリで走るかどうか調査したいので企業を限定しました select d1.取引開始日, d1.取引終了日 from 取引データ as d1, 取引データ as d2 where d1.企業 = 'A' and d2. 取引開始日 = (select min(d3.取引開始日)                 from 取引データ as d3 where d3.取引開始日 > d1.取引終了日 + '21') 出力したい結果ですが --------------------------------------------------- 企業 取引開始日 取引終了日  ★経過日  ★3週間以上 --------------------------------------------------- A   20110610    20110612 A   20110701   20110710    18 B   20110401   20110403     B   20110408   20110421     5 B   20110701   20110701    70        ○ 対処法をご教示いただきますようどうぞ宜しくお願いいたします。

  • 英語で(子供に)「今日のお当番さんは○○ちゃんよ」は?

    タイトルの通りです。 英語で子供に、「今日のお当番さんは○○ちゃんよ」というのは何と言えばいいのでしょうか? ニュアンスとしては、よく幼稚園などで「お当番さん」というのを決めて、そのお当番さんはお掃除をしたり、その日使うものをクラスの子に配ったりするというのがありますよね、そんな感じです。 いろいろ調べたりしてみたのですが微妙にニュアンスが違ったりしたらいやだと思い思い切って質問してみることにしました。 ご回答よろしくお願いいたします。

  • ACCESSとxls.で相違する差分結果が出る

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136 No.1 回答者:bin-chan回答日時:2014/09/26 22:11 > エクセルの方が1多いのですが、エクセルが誤りでしょうか。 いいえ。「関数の仕様が異なる」です。fの数も違うし。 参考URL:http://www.office-kitami.com/lesson/afunction/datediff.html ↑↑↑↑↑ 原因はわかったのですが、xls.と同じ定義にはできないのでしょうか。 他の方は、このような場合、どのように対処されているのでしょうか。。。

  • 質問の続き

    >締め日は固定していないので、日付まで入れて下さい。 >その日から1ヶ月の集計をする仕様になっています。 > >集計開始日に 2007/5/21 と日付まで入れると、 >2007/5/21 ~ 2007/6/20 までになると思います。 > >============================================================ >日付の入力を省略したいなら、下記の様に変更して下さい。 > >集計開始月に 2007/5 と月まで入力すれば、 >2007/5/21 ~ 2007/6/20 までになると思います。 > >----集計日---- >PARAMETERS 集計開始月 DateTime; >SELECT DateAdd("d", 番号+20, 集計開始月) as 集計日 >FROM 連番 >WHERE DateAdd("d", 番号+20, 集計開始月) < DateAdd("m", 1, >DateAdd("d", 20, 集計開始月)); というSQLを教えてもらったのですがこれだと[2008/01]と入力すると 2008/01~02までとなってしまいます。 これを2007/12~2008/01と変えたいのですがどこをどうしてよいやら困ってます。 どなたか教えてくれませんか?

  • エクセルのVLOOKUP関数について

    エクセルの関数で悩んでいます。 やろうとしていることは、たとえばA1のセルに日付(年月日)を入力すれば、入力した月だけを判断してその月の掃除当番の名前がセルB1に表示されるようにしたいのです。 1月から12月までの掃除当番は決まってますので、事前に別のセルに表を作成(たとえばH1~H12には1月、2月・・・・12月と入力し、I1~I12にはそれぞれの掃除当番名を入力して)し、VLOOKUP関数で呼び出せないかなぁと思っていたのですが、セルA1の日付(たとえば2006/8/27)から8月と判断する方法がわからないのです。 どなたかご存知でしたらご教授頂けないでしょうか。 他の関数を使用してする方法などでも結構です。 宜しくお願いいたします。

  • エクセル2013で表の組み替え

    エクセル2013で表の組み替え エクセル2013で表の組み替えのしかたを教えてください。 勤務表のイメージです。 下の例で、A2からA7までは担当者名(実際はもっと多く)、B1からF1までは日付(架空の例として5日まで)、B2からF7までに担当箇所(実際はもっと多く)がはいります。 1つの担当箇所に2人以上がはいることもあり得ます(見習、応援など)。 この上の表を、下の表のようにかんたんに組み替えたいのです。 下の表では、A2からA11までは担当箇所(2人以上はいることもあるので同一担当箇所の行が2行以上にふえることもあり得ます)、B1からF1までは日付、B2からF11まで担当者名です。 このような組み替えは、関数でやるのでしょうか、それともVBAでしょうか? それとも(使った事はなくて勉強しなければなりませんが)データベースソフトのアクセスで処理すべき事でしょうか? 手作業でコピーするのが大変なのでどうか教えてくださいませ。

  • 1つのsql文でデータを取得したい

    phpとmysqlを連携させデータを取得しています。mysql5です。 現在は2つのテーブルからデータを取得するため以下のように2回のsql文を発行しています。 $sql = 'SELECT products_id, name, products_flag, comment1, IF("' . $products->beforedays . '" < DATE(create_date), "1", "0") as new, FROM products WHERE status = ? AND del_flg = ? ORDER BY create_date DESC'; // 1回目のsqlで取得したproducts_idを参照し下記のsqlを実行 $sql = 'SELECT MIN(price1) as min_price1, MAX(price1) as max_price1, MIN(price2) as min_price2, MAX(price2) as max_price2, IFNULL(price2, price1) as price0, stock FROM products_class_detail WHERE products_id = ?'; これを1回のsqlにまとめる場合どのような書き方になるでしょうか? 自分なりに下記のようにしてみたところ動作はするのですが複数のデータが条件に 当てはまるはずがminとmaxがあるためか条件に当てはまる最後のデータのみしか 取得されませんでした。 ※試しにmin,maxを外すと複数のデータを取得できました。 $sql = 'SELECT products.products_id, products.name, products.products_flag, products.comment1, IF("' . $products->beforedays . '" < DATE(products.create_date), "1", "0") as new, MIN(products_class_detail.price1) as min_price1, MAX(products_class_detail.price1) as max_price1, MIN(products_class_detail.price2) as min_price2, MAX(products_class_detail.price2) as max_price2, IFNULL(products_class_detail.price2, products_class_detail.price1) as price0, products_class_detail.stock FROM products, products_class_detail WHERE products_class_detail.products_id = products.products_id AND products.status2 = ? AND products.del_flg = ? ORDER BY' . $where_sql; 商品の情報を取得するsqlで最後のorder句は商品の並び順の変更でユーザーの指定した 順番(新着順や価格順等)で表示するためのものです。 2回のsqlの場合は問題なく動作していたのですがで新着順や価格順に並び替えを行うため 1回のでsqlで行いたいと思っております。 新着順の場合は1回目のsqlに条件が入るので問題ないのですが価格順の場合は2回目の sqlに条件が入るので2回のsqlではうまく並び替えができませんでした。 ソースの短縮にもなり可能であれば1回のsqlで完結させたいのですがどうすればいいものか わからずつまづいております。 詳しい方がいらっしゃいましたら宜しくお願い致します。

  • エクセルで予定表を管理。

    たとえば、下のような(1)の表を元に、別のシートの(2)のカレンダーの日付と、 1)の日付と担当者が、一致したセルへ、”開始”という文字をを自動で入れる事はできるのでしょうか? また表示後にも、”開始”が目立つようにセルに色が入ると見やすいのですが・・・。 こういった場合は、どうしたらいいのでしょうか?良い知恵をお願い致します。 よろしくお願いいたします。m(_ _)m (1)      A 列    B 列     E列  1    日付   担当者     開始 2   2007/6/7  あ 3   2007/6/1  い 4   2007/6/10  う (2)カレンダー    A列  B  C  D... G  H  I  J  K 1行 担当者 6/1 6/2 6/3,,,6/6 6/7 6/8 6/9 6/10........ 2行  あ             開始 3行  い  開始 4行  う                      開始