私の答えは少し遅れますが、それは他人を助けるかもしれません。そこSQL Serverのファースト()とLast()を達成するための方法であり、ここにある:最初に()と最終マックス()()のための
Stuff(Min(Convert(Varchar, DATE_FIELD, 126) + Convert(Varchar, DESIRED_FIELD)), 1, 23, '')
利用分()。 DATE_FIELDは、それが最初のレコードか最後のレコードかを決定する日付でなければなりません。 DESIRED_FIELDは、最初または最後の値が必要なフィールドです。何それがないことである:
- は(そのフィールドのMIN/MAX値を取得します
- は、その文字列
- にDESIRED_FIELDを追加(23文字)の文字列の先頭にISO形式の日付を追加します。それが日付で開始するので、あなたは、最初または最後のレコードを取得します)
- あなたが行くここで最初の23文字(日付部分)
を削除するには、文字列をconcatenedスタッフ!
EDIT:DATE_FIELDのミリ秒が.000の場合、SQL ServerはDESERMED_FIELDから最初の4文字を削除して、ミリ秒単位でストリングとして日付を返します。私はフォーマットを "20"(ミリ秒なし)に変更しただけで、すべてうまく動作します。唯一の欠点は、同じ秒で作成された2つのフィールドがある場合、並べ替えが面倒である可能性があるということです...この形式では「126」に戻すことができます。
Stuff(Max(Convert(Varchar, DATE_FIELD, 20) + Convert(Varchar, DESIRED_FIELD)), 1, 19, '')
EDIT 2:私の元の意図は最後の(または最初の)NON NULL行を返すことでした。私は最後の行や最初の行を返す方法を聞かれました。 DESIRED_FIELDにISNULLを追加するだけです。 2つの文字列を+演算子で連結すると、そのうちの1つがNULLの場合、結果はNULLになります。したがって、以下を使用してください:
Stuff(Max(Convert(Varchar, DATE_FIELD, 20) + IsNull(Convert(Varchar, DESIRED_FIELD), '')), 1, 19, '')
SQL Serverがオフに悪化しているアカウントの最初のユーザ「を返すFirstUser」で参加します。私はそれがなぜSQL Serverに存在しないのか説得力のある説明を聞いたことがありません。時には、彼らがどんな順序であっても(それらがすべて特定のグループの列に同じ値を持っているかどうか)問題ではない場合もあります。どちらの方法でも、FIRST()が使用されます。 – micahhoover