• ベストアンサー

2つの列からの最大値取得

orangemikanの回答

  • ベストアンサー
回答No.2

select max(dateall) from (select date1 as dateall from table_name union select date2 as dateall from table_name) as temp; date1 と date2 を取得結果を union でくっつけてから最大値を取得するのはどうでしょうか? 列名に別名をつけてるのは私がわかり易くするためで以下でも date1 と date2 の最新を取得できると思います。 select max(date1) from (select date1 from table_name union select date2 from table_name) as temp;

関連するQ&A

  • 分岐SQLを一発のSQLで実現したい

    【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD Table2 種類、キー1、キー2 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD Table3 種類、キー1、キー2 NULL  AAA  BBB NULL  AAA  CCC NULL  AAA  DDD これをUNIONで取得します。 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD NULL  AAA  BBB NULL  AAA  CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD →いる NULL  AAA  BBB →いらない NULL  AAA  CCC →いらない ↓結果 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。

  • 同じ列に2行づつで出力するSQL

    次のようなテーブルがあったとき no | name 1 | aaa 3 | bbb 4 | ccc 6 | ddd (先頭はカラム名です) 以下のように出力するSQLは書けますでしょうか? no1| name1 | no2| name2 1 | aaa | 3 | bbb 4 | ccc | 6 | ddd

  • 異なるキーで取得したデータの合成

    SQLに関して質問です。 以下のようなテーブルA、Bがあった場合、 【テーブルA】  カラム1  カラム2  ------------------------  AAA   CCC  BBB   DDD 【テーブルB】  カラム3  カラム4  ------------------------  AAA   1  BBB   2  CCC   3  DDD   4 次のような結果を得るにはどのようなSQL文を記述すれば良いでしょうか? 【求める結果】  カラム1  カラム2 カラム4(1) カラム4(2)  ---------------------------------------------------  AAA   CCC    1      3  BBB   DDD    2      4 非常に初歩的な質問かもしれませんが宜しくお願いいたします。

  • 最新レコードを抽出し外部結合する方法について

    お世話になります。 現在、最新レコードを抽出し外部結合するSQLを考えているのですが、実現できておりません。 実現できるSQLをご存知の方、いらっしゃいましたら情報を頂けますでしょうか。 # 私の使用しているのは、PostgreSQL8.3となります。 実現したい内容は、以下となります。  1.テーブルAから「名前」でグループ化して最新の「更新日付」のレコードを抽出。  2.1の結果とテーブルBを「名前」で結合。  3.テーブルAの「名前」、「点数」、「更新日付」とテーブルBの「判定」を抽出。    ⇒ただしテーブルAに情報がある場合は、テーブルBの判定結果を「0」にして出力。      テーブルA               テーブルB ----------------------------   -----------------------  名前| 点数| 更新日付       名前 | 判定  ----------------------------   ----------------------- AAA   98   2011/4/1        AAA   0  AAA   60   2011/4/3        BBB   1  BBB   70   2011/4/2        CCC   1  BBB   35   2011/4/4        DDD   1  DDD   98   2011/4/1        EEE   0  EEE   47   2011/4/5         FFF   0  GGG   80   2011/4/6        GGG   1    【出力結果】 ---------------------------------------------  名前 | 点数  | 更新日付 | 判定  --------------------------------------------- AAA    60     2011/4/3      0  BBB    35     2011/4/4     0(1⇒0に変更)  CCC   NULL     NULL       1  DDD    98     2011/4/1     0(1⇒0に変更)  EEE    47     2011/4/5      0  FFF    NULL     NULL       0  GGG    80     2011/4/6     0(1⇒0に変更) お手数お掛け致しますが、ご教示のほどよろしくお願い致します。

  • 日付の最大値レコードを取得する方法について

    お世話になります。 SQLで日付の最大値を取得する方法です。 テーブルのデータ内容は以下のようになっています。 | 社員番号 | 社員名 | 日付 | 順序 | +---------+-------+-----------+-----+ | 100 | AAA | 2011/05/01 | 2 |   ← このレコードを取得したい +---------+-------+-----------+-----+ | 100 | AAA | 2011/05/01 | 1 | +---------+-------+-----------+-----+ | 100 | AAA | 2011/04/01 | 1 | +---------+-------+-----------+-----+ | 200 | BBB | 2011/04/01 | 2 |   ← このレコードを取得したい +---------+-------+-----------+-----+ | 200 | BBB | 2011/04/01 | 1 | +---------+-------+-----------+-----+ 取得したいレコードは、 社員ごとの最大日付の最大順序をもつレコードです。 (上記の1行目と4行目のレコードを取得したい) この場合、 下記のようなSQLを考えます。 --------------------------------- SELECT 社員番号, 社員名, 日付 FROM テーブル名 WHERE 社員番号 = 'xxx' AND 日付 = (SELECT MAX(日付) FROM テーブル名 ) AND 順序 = (SELECT MAX(順序) FROM テーブル名 ) ---------------------------------- 但し、上記の場合、 社員ごとに最大値レコードが取得できません。 どなたかレコード取得方法について 教えていただけないでしょうか? よろしくお願いいたします。

  • SQLの勉強を始めたばかりの初心者です。

    SQLの勉強を始めたばかりの初心者です。 2つのテーブルを結合し、以下のような結果を求めるSQL文はどう記述したら良いのでしょうか? アドバイス頂きたく、よろしくお願い致します。 【テーブル1】 ID  Data  Name ------------------------------------------------ 1  AAA   あいう 5  BBB   かきく 7  CCC   さしす 8  DDD   たちつ ------------------------------------------------- 【テーブル2】 ID  Information  Index -------------------------------------------------- 5   Error     100 8   Check    200 15  Warnning   300 20  Non      0 -------------------------------------------------- 【取得したい結果】 ID  Data  Name  Information   Index ------------------------------------------------- 1  AAA   あいう 5  BBB   かきく  Error      100 7  CCC   さしす 8  DDD   たちつ  Check     200 15             Warnning   300 20             Non      0 ------------------------------------------------- つたない説明で申し訳ありません… なお使用しているのはSQL Server 2008です。

  • Sqlite3にて、縦持ちデータの一部を横持ち

    お世話になります。 Sqlite3 windows7 使用です。 Sqlite3にて縦持ちの一部を横持ちにする作業をしています。 text_date|name|uriage 05_01  aaa  1 05_01  bbb  2 05_01  ccc  3 05_01  ddd  4 05_01  eee  5 05_02  aaa  6 05_02  bbb  7 05_02  ccc  8 05_02  ddd  9 05_02  fff  10 05_03  aaa  11 05_03  bbb  12 05_03  ccc  13 05_03  ddd  14 05_03  ggg  15 05_04  aaa  16 05_04  bbb  17 05_04  ccc  18 05_04  ddd  19 05_04  hhh  20 列:text_dateには、日付がテキストデータで入力されています。 列:nameには、同一でない名前が一部含まれます。 列:uriageは、INTEGERにて入力されています。 この表の日付(text_date)の任意の2日分を、 名前ごとにグループ化し、日付を横列展開にてuriageの表示をしたいです。 例えば、日付が05_03 と 05_04 のデータを下記のように取得したいです。 name|uriage_03|uriage_04 aaa   11    16 bbb   12    17 ccc   13    18 ddd   14    19 ggg   15   hhh        20 下記のSQL文で 名前(name)をグループ化する前の横列展開はできるのですが、 名前をグループ化すると、片方の日付しか表示されなくなります。 (重複のない人は、そのまま表示されるます) ------------------- select name ,case  when text_date = '05_03' then uriage end as uriage_03 ,case  when text_date = '05_04' then uriage end as uriage_04 from ( select * from test1 where text_date = '05_03' or text_date = '05_04' ) group by name   ←*group byを入れると片方の日付だけが表示 ------------------- ↓nameをグループ化すると片方の日付のみが表示 name|uriage_03|uriage_04 aaa        16 bbb        17 ccc        18 ddd        19 ggg   15   hhh        20 正しいコードをご教示いただけますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • オラクルで

    オラクルのSQLでの質問ですが、 2つのテーブルに同じ名前の列があります。 TEMP1         TEMP2 ----------      ------------- NAME CODE      NAME  NUM aaa   1         ccc   5 bbb   2         ddd   10 この2つのテーブルを検索して、同じ列として表示したいのですが 可能なのでしょうか? NAME ----------- aaa bbb ccc ddd このようにしたいのですが、ビューなどは使ってかまわないのですが 方法がありましたら教えてください。

  • データ取得

    name*****key1****key2****date ------------------------------- AAA*******1*******1*****2003/01 BBB*******2*******2*****2002/12 AAA*******1*******2*****2003/01 BBB*******1*******2*****2002/11 BBB*******2*******2*****2002/11 AAA*******2*******2*****2003/01 AAA*******2*******2*****2002/12 ------------------------------- (※全てのフィールドが同じ情報のレコードはない) ****は意味はありません。表を見やすくするために書いただけです。 上記のテーブルから下記のデータを取得したいと 考えています。 AAA*****2002/12*****1 AAA*****2003/01*****3 BBB*****2002/11*****2 BBB*****2002/12*****1 name列とdate列の重複しないレコードの件数を取得したいのですが どのようなSQLを記述すればよろしいでしょうか?

  • 重複レコードの抽出について

    以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。 mail | name ----------- aaa | 01 aaa | 01 aaa | 01 bbb | 02 bbb | 02 bbb | 01 ccc | 01 ccc | 01 ccc | 02 select * from test where mail in (select mail from test where mail group by mail having count(mail)>1) 上記のSQL文だと以下のデータが取得されてしまいます。 ↓ mail | name ----------- aaa | 01 ○ aaa | 01 ○ aaa | 01 ○ bbb | 02 × bbb | 02 × ccc | 01 × ccc | 01 × ○印のみ取得したいのですが、 SQL文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。