2016-09-05 10 views
0

私は毎日テーブルの上で大量の取引をしています。 その日にの最後のの取引が発生したかっただけです。最新の日付と時間を選択してください

私はthisをコピーするために抱き合わせていますが、私はここに私自身の

でそれを実装することはできませんが、私のスクリプトは

SELECT 
product_id 
,product_name 
,stock_on_hand 
,stock_in 
,stock_out 
,date_track 
FROM stocks_history 
WHERE 
product_id = 30 
AND 
date_track between '9/1/16' and '9/9/16' 

であり、これは瞬間

enter image description hereのように私の結果であり、

これは私の希望する出力です

enter image description here

日時のみを使用してその日に最後に発生したトランザクションのみを取得する方法はありますか?

+1

BY '9/9/16' ORDERは、時間または完全なタイムスタンプを持つ列はありますか? – redneb

+1

最後の取引がどのように分かっていますか? SQLテーブルは、*順序付けられていない*集合を表します。列が順序を指定しない限り、最後の行はありません。 –

+0

@redneb私はここで日付を使用しています。 –

答えて

1

あなたが一日以内に順序を指定する列を持っている場合は、あなたが行うことができます:

SELECT sh.* 
FROM (SELECT sh.*, 
      ROW_NUMBER() OVER (PARTITION BY product_id, CAST(date_track as DATE) 
           ORDER BY date_track DESC 
           ) as seqnum 
     FROM stocks_history sh 
     WHERE product_id = 30 AND 
      date_track between '2016-09-02' and '2016-09-05' 
    ) sh 
WHERE seqnum = 1; 

あなたが順序を持っている別の列を持っている場合は、ORDER BYのためにそれを使用します。

+0

私はちょっと新しくなっています。私は質問をこれで置き換えますか?これを試してエラーが出るので、 'FROM()'の中に挿入しますか? @ rainalasa。 –

+0

。 。これにより、クエリが置き換えられます。もちろん、必要な列だけを選択して、他の変更を加えることもできます。答えの目的は、1日に最新のレコードを取得するためのロジックを説明することです。 –

+0

私の質問を更新するつもりです。ちょうど日付だけで最後のトランザクションを取得する方法はないと思うので、datetimeを使用してください。 –

1
SELECT TOP 1 
product_id 
,product_name 
,stock_on_hand 
,stock_in 
,stock_out 
,date_track 
FROM stocks_history 
WHERE 
product_id = 30 
AND 
date_track between '9/1/16' and '9/9/16' 
order by date_track asc 
0

株価履歴表のdate_trackフィールドで日付の入力がサポートされている場合は、ORDER BYで問題を解決できます。 SELECTは 、PRODUCT_NAME をPRODUCT_ID、stock_on_hand 、stock_in 、 '9/1/16' の間stocks_history のproduct_id = 30とdate_track FROM 、date_track をstock_outと


:あなたは、次のクエリを試すことができますdate_track DESC


関連する問題