0
A
答えて
0
私はあまりOracleに慣れていないので、SQL Server固有のアプローチ(サンプル用の変数以外)を避けていますが、問題を解決する方法は、4つの列を結合するサブクエリを作成する方法です列名、4つの値の最大値を取得する別のサブクエリ、および結合された結果を返す外部クエリをマップします。 、行識別子によってグループに集約サブクエリを修正し、その後同様に
Declare @x table(id int
, date1 datetime
, date2 datetime
, date3 datetime
, date4 datetime)
insert into @x
values (1, '01/01/2000'
, '01/01/2001'
, '01/01/2002', '01/01/2004')
insert into @x
values (2, '01/01/2010'
, '01/01/2020'
, '01/01/2030', '01/01/2040')
Select SomeDate, ColumnName
from
(
Select date1 as somedate
, 'Date 1' as ColumnName from @x
union
Select date2 as somedate
, 'Date 2' as ColumnName from @x
union
Select date3 as somedate
, 'Date 3' as ColumnName from @x
union
Select date4 as somedate
, 'Date 4' as ColumnName from @x
) t1
inner join
(
Select max(tx.somedate) MaxDate from
(
Select date1 as somedate from @x
union
Select date2 as somedate from @x
union
Select date3 as somedate from @x
union
Select date4 as somedate from @x
) as tx
) t2
on t1.SomeDate = t2.MaxDate
1
場合、そのカラムに結合することによって、行の最大にサンプルを、以下の表の最大を返すであろうが、これは調整することができます私は、列名を望んでいた(と私はそれをしたいと思う理由は私にはわからない場合は
select case when dt1 > d2 then dt1 else dt2 end as latest from table;
:行ごとに、私はcase文を使用すると思い、2つの日付の列で最新の日付を望んでいました):
select case when dt1 > d2 then 'dt1' else 'dt2' end as latest from table;
私は複数の列に対処したい場合は、私が巣よりcase文たい:
select case when dt1 > d2 then
(case when dt1 > dt3 then dt1 else dt3 end)
else
(case when dt2 > dt3 then dt2 else dt3 end)
end as latest
from table;
または、より良いが、私はこのようにそれを行うことができます:(多分良い)
select case
when dt1 > d2 and dt1 > dt3 then dt1
when dt2 > d1 and dt2 > dt3 then dt2
else dt3 end as latest
from table ;
それとも私があります関数を書く。 maxは組み込み関数なので、maxOfという名前を書いておきます。 、
create function maxOf(date lhs, date rhs)
RETURNS date
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
COMMENT 'return the later of two dates'
return case when lhs > rhs then lhs else rhs end;
select maxOf(dt1, maxOf(dt2, dt3) as latest from table;
0
OracleはGREATESTあり、LEAST
あなたのカラム名が何であるかSELECT GREATEST (TO_DATE ('01-01-2000', 'DD-MM-YYYY'), TO_DATE ('01-01-2010', 'DD-MM-YYYY')) FROM DUAL;
SELECT LEAST (TO_DATE ('01-01-2000', 'DD-MM-YYYY'), TO_DATE ('01-01-2010', 'DD-MM-YYYY')) FROM DUAL;
関連する問題
- 1. mySQLのさまざまなテーブルから列を選択
- 2. グループから最大日付の列を選択するLINQ
- 3. XML列から最大日付を選択
- 4. SQL - NVARCHAR列の最新の最大日付を選択してください
- 5. 最大セルから最初のセルまでの列を選択
- 6. レジスタから最大と最小の日付を選択
- 7. 単一の行の異なる列から最大日付を選択してください
- 8. 日付が最大日付よりも小さいハイブテーブルから選択
- 9. oracleで最大日付を選択
- 10. Javaを使用してSQLテーブルから最大日付を選択
- 11. SQLテーブルから日付で最高のセールを選択
- 12. TSQLのさまざまな最大日付オプションが機能しない
- 13. 配列からの最大サブ配列の選択
- 14. TSQL選択3列から最大その後、内側の列に参加
- 15. テーブルの列から別の日付書式の種類を選択して選択してください
- 16. テーブルから日付を選択 - strtotime?
- 17. SQL Serverテーブルから日付を選択
- 18. sqlは今まで最大日付を選択します
- 19. 最大日付で再選択する
- 20. 日付に最も近い日付を別のテーブルに選択
- 21. 同じテーブル内の別の列の最小日付から日付の列を更新
- 22. ユニークキーの最大日付行を選択してください
- 23. 名前に日付が含まれているファイル名の配列から特定のファイル名を選択
- 24. 異なるテーブルから列を選択
- 25. Firebirdの列のドメイン名でテーブルから列名を選択する方法は?
- 26. 最大日付を選択します。<指定した日付
- 27. 行の最大値を選択し、列名でタグ付けする方法
- 28. 別の列で最大数を選択
- 29. 最新の日付の属性のSQL選択列
- 30. mysqlテーブルの列名を選択
:これは、MySQLの関数の構文では、あなたのDBは異なる構文を使用して、代わりに値を返すの変数をOUT使用することです1列の最大日付は1つだけですか? – TStamper
あなたの説明はあいまいです。行の最新の日付を持つ列の名前、または最新の日付の行が必要ですか? – tpdi
あなたはどのデータベースプラットフォームを使用していますか?質問には、OracleとSQL Serverの両方でタグが付けられます。 –