- ベストアンサー
2つの列からの最大値取得
orangemikanの回答
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で取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。
- ベストアンサー
- SQL Server
- 同じ列に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 非常に初歩的な質問かもしれませんが宜しくお願いいたします。
- ベストアンサー
- Oracle
- 最新レコードを抽出し外部結合する方法について
お世話になります。 現在、最新レコードを抽出し外部結合する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に変更) お手数お掛け致しますが、ご教示のほどよろしくお願い致します。
- ベストアンサー
- PostgreSQL
- 日付の最大値レコードを取得する方法について
お世話になります。 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 テーブル名 ) ---------------------------------- 但し、上記の場合、 社員ごとに最大値レコードが取得できません。 どなたかレコード取得方法について 教えていただけないでしょうか? よろしくお願いいたします。
- ベストアンサー
- Oracle
- 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です。
- 締切済み
- SQL Server
- 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文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。
- 締切済み
- その他(データベース)