私はDATEの2つのペアを持つテーブルを持っています。私はこれらの日付の時間に基づいて結果を注文したい。Oracle OR MySQL - NULL値に応じて異なるcritereaを持つカスタムORDER
| start1 | end1 | start2 | end2
row 1 | 4:00 | 5:00 | 5:00 | 6:00
row 2 | 4:30 | 5:00 | NULL | NULL
row 3 | NULL | NULL | 5:30 | 6:00
row 4 | 5:00 | 6:00 | 6:00 | 7:00
2つの行があります:このように、(START2> START1、END2> END1とSTART2> = END1行が間隔の両方を有する)各行が、日付の少なくともつのペアを持っています両方のペアは、start1で比較する必要があります。 START1が
一列は一組(任意)を有し、他方は両方の対を有する場合、それらは比較されるべきであるがSTART2と比較されるべき、一列のみPAIR1を有し、他は唯一PAIR2を有する
(start1からstart1またはstart2からstart2までの)ペアによって、最初の行が持っています。たとえば、最初の行にstart2とend2のみがあり、2番目の行にstart1、end1、start2とend2がある場合、これらの2つの行はstart2だけ比較されます(2番目の行からのstart1は無視する必要があります)
どうすれば実現できますか?
EDIT
私は簡単にC#でそれを行うことができますが、私は、データベースにこの操作を行う必要があります。それはC#で動作するべきかのコードの下:
static void Main(string[] args)
{
...
intervals.Sort(new IntervalComparer());
}
public class IntervalComparer : IComparer<Interval>
{
public int Compare(Interval quadro1, Interval quadro2)
{
int result = 0;
if (quadro1.start1 != null && quadro2.start1 != null)
result = quadro1.start1.Value.CompareTo(quadro2.start1.Value);
else if (quadro1.start2 != null && quadro2.start2 != null)
result = quadro1.start2.Value.CompareTo(quadro2.start2.Value);
else if (quadro1.start1 != null)
result = quadro1.start1.Value.CompareTo(quadro2.start2.Value);
else
result = quadro1.start2.Value.CompareTo(quadro2.start1.Value);
return result;
}
}
Oracle®DatabaseまたはOracle®MySQL? – Alfabravo
私はそれらの両方でやってみたいですが、どんな助けも歓迎です – romerotg
Oracle NVLやORDER BYで... NULLS LAST/FIRSTはあなたの友人です –