最新日付のデータを取得する方法
- SQLを使用して、最新の日付のデータを取得する方法について教えてください。
- 以下のようなデータから最新の日付のデータを抽出したいです。どのようにSQLを記述すればよいでしょうか。
- 抽出後のデータは、個人番号、日付、名前、生年月日が含まれる形式で表示されることを期待しています。
- ベストアンサー
最新日付のデータを取得したい
初心者でいまいちSQLが記述できませんでした。 どなたか教えてください。 以下のようなファイルから最新日付のデータを 取得したいのですが、どのようにSQLを記述したら よいかわかりません。 個人番号|日付|名前|生年月日 00000001,2001/1/1,テスト太郎/1960/1/1 00000001,2003/1/1,テスト太郎/1960/1/1 00000001,2004/1/1,テスト太郎/1960/1/1 00000002,2002/1/1,テスト花子/1945/1/1 00000002,2003/1/1,テスト花子/1945/1/1 00000002,2005/1/1,ですと花子/1945/1/1 00000003,2001/1/1,テスト次郎/1980/1/1 00000003,2003/1/1,テスト次郎/1980/1/1 00000003,2005/1/1,テスト次郎/1980/1/1 ↓抽出後 00000001,2004/1/1,テスト太郎/1960/1/1 00000002,2005/1/1,ですと花子/1945/1/1 00000003,2005/1/1,テスト次郎/1980/1/1 よろしくお願いいたします。
- deny
- お礼率64% (11/17)
- Oracle
- 回答数2
- ありがとう数10
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
8i workgroup だと、分析関数が使えません。9i以降は、standard(旧workgroup)でも使えますが。以下、代替え法です。 ・個人番号毎に日付が単一(同一日なし)なのであれば、 select 個人番号,日付,名前,生年月日 from TARGET where (個人番号,日付) in (select 個人番号,max(日付) from TARGET group by 個人番号) ;
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
オラクルのバージョンによって、最適なSQLが変わってくるので、 バージョンとエディションは書いておく方が良いと思いますよ。 分析関数による解決法 select 個人番号,日付,名前,生年月日 from ( select TARGET.*, row_number() over(partition by 個人番号 order by 日付 desc) R from TARGET ) where R=1 分析関数を使わない方法もありますが、面倒なので割愛。
補足
回答ありがとうございます。 初めて質問させていただきましたので、 バージョン等の記述が抜けてしまいました。 失礼いたしました。 バージョンはoracle8iです。 すみません、初心者でエディションとはどこで 確認したらよいのか良く分かりません。 Oracle8iWorkgroupServer R8.1.7 for WindowsNT/2000 と書いてありました。 早速試してみたのですが、 ORA-00439: 機能は使用できません: OLAP Window Functions とエラーとなってしまいました。 バージョンの問題でしょうか? 本当にOracle初心者でよくわからず、すみません。 よろしくお願いいたします。
関連するQ&A
- SQLServerでの複数テーブルからのデータ抽出
皆様、お知恵を拝借させてください。 現在、SQLServer + VB.netで開発を行っていますが、どうしてもうまくいかないので悩んでいます。 ロジックを組めば解決できるのは、わかっているのですが、SQL文だけで解決したいのです。 よろしくお願いします。 やりたいことは、複数テーブルからの同一IDの抽出です。 IDで単一化 テーブル【現在】を優先して抽出 テーブル【履歴】のみ存在する場合、履歴NOの大きい方を抽出 テーブル【現在】 ID 名前 趣味 ------------------ 10 太郎 釣り 20 次郎 ゴルフ テーブル【履歴】 ID 名前 趣味 履歴NO ------------------------- 10 太郎 将棋 01 10 太郎 囲碁 02 30 花子 園芸 01 30 花子 料理 02 求めたい結果は 10 太郎 釣り 20 次郎 ゴルフ 30 花子 料理 です。よろしくお願いします。
- ベストアンサー
- SQL Server
- Mysqlで最新の日付を持つデータを取得するSQLを書きたい
Mysqlで最新の日付を持つデータを取得するSQLを書きたい 管理テーブル(MySql) 日 付|食べたもの ----------- 4月1日|パン 4月2日|ご飯 4月3日|パン 4月4日|パン 4月5日|ご飯 4月6日|カレー と言ったデータがあったとき パンを食べた最新の日付を取得したいとき どんなSQLを書けばいいのでしょうか? SELECT * FROM 管理テーブル WHERE 食べたもの = パン ORDER BY 日付 DESC LIMIT 1; とすれば、思うような結果が出ましたが LIMITは使いたくありません また 日 付|食べたもの ----------- 4月4日|パン 4月5日|ご飯 4月6日|カレー 上記のように 食べたのもそれぞれの最新の日付を表示して 一覧にしたいとき(表現ベタですみません) どんなSQLになりますか?
- ベストアンサー
- MySQL
- 最新の日付と2番目の日付のデータ取得方法
SQL Server 2008 にて下記条件を満たしたデータの取得を行いたいです。 ・IDごとに、日付がある日以前で最新のものとその次の日付のデータ2件 ・ただし、その2件で価格が変わらなければ価格変動のあった日付のデータまでさかのぼる ・価格が同じデータの場合、古い日付のデータを取得 例: ・条件…日付が20040101以前 <検索対象データ> ID 日付 価格 ------------------------ 1 20000101 100 1 20010201 100 1 20020301 200 2 20020401 300 2 20000501 400 2 20010601 400 2 20030701 300 3 20000801 500 3 20010901 600 3 20040901 600 <取得したい結果> ID 日付 価格 ------------------------ 1 20020301 200 1 20000101 100 2 20020401 300 2 20000501 400 3 20010901 600 3 20000801 500 なるべく少ないSelect文で取得したいと考えております。 よろしくお願いします。
- 締切済み
- SQL Server
- Excel(マクロ?VBA?)で最大日付の行を抽出
Excelのデータ抽出で困っております。 下記のようなデータがあり、各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。 氏名 ID 日付 山田太郎 10 2012/12/01 山田太郎 10 2013/08/01 山田太郎 10 2014/12/01 山田太郎 10 2015/08/01 山田花子 20 2012/12/01 山田花子 20 2013/08/01 山田花子 20 2013/12/01 この際に、 山田太郎 10 2015/08/01 山田花子 20 2013/12/01 という2つの行を抽出したいですが、抽出方法がわかりません。 関数を使ってやろうとも思いましたが、関数をどれを使えばいいかわかりません。 別シートに抽出でも全く問題ありませんので、恐れ入りますが、抽出方法を教えてください。 よろしくお願いいたします。
- 締切済み
- Excel(エクセル)
- 申込日から起算して1ヶ月経過しているデータのみ表示
はじめまして。現在仕事でデータベースアプリを開発しているのですが、表題の件でちょっと頓いてしまっているので、皆様のお知恵を借りたく投稿させていただきます。 開発環境は下記で行っております。 ================================================================ OS:WindowsXP Professional SP3 アプリケーション:Access ADP(Access2007 + SQLServer2008 Express) SQLServer Management Studioを使用 ================================================================ あるサービスへの申込者一覧をビューにて作成したいと思っているのですが、例を挙げると下記のようなデータ ---------元データのテーブル------------- 申込日 氏名 2010/12/01 テスト太郎 2010/12/02 テスト三郎 2010/12/05 テスト次郎 2010/12/31 テスト三郎 2011/01/04 テスト次郎 2011/01/05 テスト次郎 2011/01/10 テスト太郎 2011/02/01 テスト太郎 2011/02/11 テスト太郎 2011/03/02 テスト太郎 -------------------------------------- をビューを用いて同じ人がビューに出力されている申し込みから起算して1ヶ月の期間内にまた申し込まれたレコードは表示しないようにしたいのです。再現したいのは下記の通りです。 ---------出力結果(ビュー)-------------- 申込日 氏名 2010/12/01 テスト太郎 2010/12/02 テスト三郎 2010/12/05 テスト次郎 2011/01/05 テスト次郎 2011/01/10 テスト太郎 2011/02/11 テスト太郎 ------------------------------------- ~~~~~~~~~~~元データをもとに解説~~~~~~~~~~~~~ 2010/12/01 テスト太郎 2010/12/02 テスト三郎 2010/12/05 テスト次郎 はお三方とも最初の申し込みなのでそのままビューに出力 2010/12/31 テスト三郎 2011/01/04 テスト次郎 はビューに出力されるレコードのデータの日付からそれぞれ1ヶ月経過していないので、 ビューには出さない 2011/01/05 テスト次郎 はビューに出力される 2010/12/05 テスト次郎 の日付 2010/12/05 より起算して1ヶ月以上経過しているのでビューに出力 2011/01/10 テスト太郎 はビューに出力される 2010/12/01 テスト太郎 の日付 2010/12/01 より起算して1ヶ月以上経過しているのでビューに出力・・・(1) 2011/02/01 テスト太郎 はビューに出力される(1)の 2011/01/10 テスト太郎 の日付 2011/01/10 より起算して1ヶ月経過していないのでビューに出力しない 2011/02/11 テスト太郎 はビューに出力される(1)の 2011/01/10 テスト太郎 の日付 2011/01/10 より起算して1ヶ月以上経過しているのでビューに出力・・・(2) 2011/03/02 テスト太郎 はビューに出力される(2)の 2011/02/11 テスト太郎 の日付 2011/02/11 より起算して1ヶ月経過していないのでビューに出力しない ---------元データのテーブル------------- (※ビューに出力は○、出力しないはX、番号は上記解説に対応) 申込日 氏名 2010/12/01 テスト太郎 ○ 2010/12/02 テスト三郎 ○ 2010/12/05 テスト次郎 ○ 2010/12/31 テスト三郎 X 2011/01/04 テスト次郎 X 2011/01/05 テスト次郎 ○ 2011/01/10 テスト太郎 ○・・・(1) 2011/02/01 テスト太郎 X 2011/02/11 テスト太郎 ○・・・(2) 2011/03/02 テスト太郎 X -------------------------------------- ※元データは申込受付テーブルなので、リアルタイムにお客様が申し込みされた日付でレコードは増えていきます ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ どのようなSQLにすればよろしいでしょうか...
- ベストアンサー
- SE・インフラ・Webエンジニア
- 一覧の表示で名前をデータ数を表示したいのですが…
お世話になります。 度々申し訳ないのですが、質問させてください。 現在mysqlに格納したデータの一覧を表示するページを作っているのですが、表示結果が思うようにいかず困っています。 環境:Mysql 5.1.22-rc,PHP 5.2.5 データベース:test01 main -------------------------------------------------------- id name kana 1 太郎 たろう 2 次郎 じろう 3 花子 はなこ -------------------------------------------------------- sub2 -------------------------------------------------------- id a_sakuhin title 1 data_1 青空 1 data_2 夕日 1 data_3 流星 3 data_1 町並み 3 data_2 列車 -------------------------------------------------------- というテーブルがあります。 それを一覧表示で ・太郎 (3) ・次郎 (0) ・花子 (2) という具合にしたいのですが、どうしても()の中が全件合わせた結果になり ・太郎 (50) ・次郎 (50) ・花子 (50) という様になってしまうのです。 どういったsql文を書けばよいのかアドバイスを頂けると嬉しいです。 よろしくお願いいたします。
- 締切済み
- MySQL
- 最新データ取得
いつもお世話になります。 Access 2007のコードを教えていただきたいです。 Access で社員単価管理を作成しています。 クエリで社員の単価を計算させて、日報フォームに表示させることができました。以下のコードで If Not IsNull(Me![個人ID]) Then Me![工数単価] = DLookup("日給", "Q_社員別給与最新日付", "[個人ID]=" & Me![個人ID]) End If 社員の単価は上がる場合がありますので、社員単価入力テーブルから最新の日付のデータを取得するため、クエリを作成しました。 これでうまく行くと思ったら、問題発生しております。 日報フォームのデータを修正する時、最新日付の単価も変わってしまいます。 うまく説明できないですので、以下のようです 社員単価入力テーブル 日付 個人ID 原価金額 20110401 01 6400 20110701 01 8000 日報フォーム 日付 個人ID 出勤時間 退勤時間 工数 残業 日給 20110630 01 8:00 18:00 1 1 7200 20110701 01 8:00 17:00 1 0 8000 データ修正後 日付 個人ID 出勤時間 退勤時間 工数 残業 日給 20110630 01 8:00 17:00 1 0 8000 データ修正後に表示してほしいのは 日付 個人ID 出勤時間 退勤時間 工数 残業 日給 20110630 01 8:00 17:00 1 0 6400 つまり、 社員単価入力テーブルの日付<日報フォームの日付なら、最新の日付のデータで計算してほしいです。そうではない場合、最新日付より前のデータで計算するというコードが書きたいですが、どういう風にに書けばいいか全く、わかりません 教えて下さい。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 集計するためのSQL構文を教えて下さい。
初めて投稿します。よろしくお願いします。 現在、ストアドプロシージャとSQLの勉強をしながら作業を行なっています。そのため説明不足などありましたらご指摘願います。 [環境] データベース:SQLServer2005 SQL作成環境 :SQLServerManagementStudioExpress(9.00.2047.00) 望んでいる出力結果 病室,タイプ,10/01水,10/02木,10/03金,10/04土,10/05日 -------------------------------------------------------------- 10,集合3,○○太郎,○○太郎,○○太郎,○○太郎,□□花子 △△太郎,△△太郎,□□花子,□□花子 □□花子,□□花子 11,個室A, ××太郎,××太郎,××太郎 12,個室B, ○○次郎,○○次郎,○○次郎,○○次郎 ※指定した日付範囲で、全病室を対象に入院中患者、入院予定患者を 病室単位で求めたいです。 関係するテーブル情報 ※マスタテーブルは、名称+Mで表記します。 ※データテーブルは、名称+Tで表記します。 [病室] 病室M( 病室番号 INT タイプコード INT ) [日付] ストアドのパラメータで集計開始日と終了日を受け取るため、 その集計範囲も動的に変わります。 ※上記の結果では、 集計日(自):2008/10/01 集計日(至):2008/10/05 を受け取った場合を想定し記述しています。 [入院者氏名] 患者T( 患者コード INT 患者氏名 VARCHAR(128) 通院種別 TINYINT(1:通院,2:入院) 退院区分 TINYINT(1:入院,2:退院) 入院日 SMALLDATETIME 退院日 SMALLDATETIME ) [患者と病室を紐付けるテーブル] 病室割当T( 割当番号 INT 患者番号 INT 病室番号 INT ) 長文となり申し訳ありません。 上記の情報でストアドを組もうとしているのですが、 SQL含め勉強不足な状態です。 実現するための考え方、方法、アドバイス等を頂きたいです。 よろしくお願い致します。
- ベストアンサー
- SQL Server
- エクセルの集計での質問
A列に日付、BからF列に担当者名(1~5)が入っています。 この表で誰が何日稼働したか調べたいのですが、日付の被りがあるのと、例えば▲▲さんが「担当者1」、●●さんが「担当者2」と決まっているわけでなく、早いもの順に「担当者1~5」までに名前が入っています。 A B C D E F 日 担1 担2 担3 担4 担5 1/3 太郎 次郎 花子 三郎 和子 1/3 次郎 太郎 三郎 美和 和子 1/4 花子 次郎 孝夫.......... この場合求められたものが 1/3 太郎 ×1、次郎 ×1、三郎×1、花子×1、和子×1 、美和×1 1/4 花子×1、次郎×1、孝夫×1 なので 太郎1日 次郎2日 三郎1日 花子2日 和子、美和、孝夫各1日 という風にエクセルで集計できないでしょうか?
- ベストアンサー
- その他(ビジネス・キャリア)
- oracle 最新日付との比較
いま、同一商品番号の最新日付を利用した条件が うまく作れず悩みながら色々試していますが、 うまくいきません。 やりたいことは、 1,AテーブルとBテーブルの 商品番号が同じ場合は除外します。 2,残されたデータから次はCテーブルの中にある 同一商品番号で、最新の日付が当月の場合はデータを残す。 つまり、前月以前のデータは除外となります。 1まではできています。 Select * from aテーブル where not exists (select 'X' from bテーブル where a.商品番号 = b.商品番号) この先上記sqlにつなげてmax関数くくった最新日付と システム日付を年月のみで比較する等試みましたが、 求めた結果になりません。 上記sqlでビューを作成してといったことは、 今回やらずに一つのsqlのみでできないかと 試行錯誤です。 よきアドバイスございましたら、 宜しくお願い致します。
- ベストアンサー
- Oracle
お礼
回答ありがとうございます! データは個人番号と日付がキー項目なので、 同一日はありません。 ご回答いただいた方法で無事できました。 本当にありがとうございました。