2016-11-22 14 views
-1

これは私のテーブルは私のデータベースにどのように見えるかです: 私は2つのテーブルがあります。最新の日付に基づいて最新のデータを取得する - MSSQL

1. Location = ID, Name 
2. Product = ProdID, LocationID, CreatedDate 

------------------------------------------------- 
| ID   | Location  | CreatedDate  
------------------------------------------------- 
| 1234   | Location 1 | 2016-11-17 12:39 
| 4567   | Location 1 | 2016-11-17 12:39 
| 8978   | Location 1 | 2016-11-17 12:39  
| 8978   | Location 2 | 2016-11-17 13:39 
| 2578   | Location 1 | 2016-11-17 12:39 
| 1234   | Location 2 | 2016-11-18 12:39 
------------------------------------------------- 

私は以下のようなテーブルを取得したい:

---------------------------------------------- 
| Location 1 | Location 2 | Location 3 | 
---------------------------------------------- 
| 1234   | 1234   |    | 
| 4567   |    |    | 
| 8978   | 8978   | 8978   | 
| 2578   | 2578   | 2578   | 
---------------------------------------------- 
をまた

私は、クエリが最後にそれぞれの場所でユニークなアイテムをスキャンした合計金額を取得したい上記の表に加え:

Location 1 count = 1 
Location 2 count = 1 
Location 3 count = 2 

説明:上記の表は、倉庫内のさまざまなアイテムの一覧です。 基本的に、アイテム1234がロケーション1で12:00以降にスキャンされ、その後13:00でロケーション2にスキャンされた場合、クエリは日付に基づいた最後のアップデートであるため、ロケーション2からのデータのみを取得する必要があります。

+1

サンプルデータを入力してください。期待した結果が得られました。しかし、サンプルデータがありません。 – Viki888

+0

'SELECT '1234' \ '場所1 \'、 '1234' \'場所2 \ '、 '' \'場所3 \ 'UNION ... ' – Strawberry

+0

サンプルデータなしでこれらのような質問に答えることは本当に難しいでしょう。この[質問](http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056)を参考にしてください。良いSQLの質問を投稿する方法。また、[ヘルプページ](http://stackoverflow.com/help/mcve)からこのガイドを読む価値があります。これらのページのアドバイスに従うことで、正しい答えが得られる可能性が高くなります。 –

答えて

0

あなたはID = LocationIDで明らかに内部結合に行きます。

これを超えて、これはあなたの「where」節です。私はあなたが欠けていた部分であると推測している各項目の最大(日付)を取得するサブクエリが必要になります。

+0

はい私の質問を最新のテーブルのように更新しました – MishMish

1

あなたはrequirement1以下

select 
    case when Location1 = 0 then null else Location1 end Location1, 
    case when Location2 = 0 then null else Location2 end Location2, 
    case when Location3 = 0 then null else Location3 end Location3 
from(
    SELECT 
     SUM(case when location_id = 'Location 1' then id else 0 end) Location1, 
     SUM(case when location_id = 'Location 2' then id else 0 end) Location2, 
     SUM(case when location_id = 'Location 3' then id else 0 end) Location3 
    from Product 
    group by ProdID) t1; 

について

を照会以下試すことができます上記のクエリの結果requirement2については

enter image description here

select 
    sum(case when Location2 = 0 then 1 else 0 end) Location1, 
    sum(case when Location3 = 0 and Location2 <> 0 then 1 else 0 end) Location2, 
    sum(case when Location3 = 0 then 0 else 1 end) Location3 
from(
    SELECT 
     SUM(case when location_id = 'Location 1' then id else 0 end) Location1, 
     SUM(case when location_id = 'Location 2' then id else 0 end) Location2, 
     SUM(case when location_id = 'Location 3' then id else 0 end) Location3 
    from Product 
    group by id) t1; 
です以下は210

は、上記のクエリ

enter image description here

注結果である:上記のクエリはPRODIDが整数である場合にのみ動作します。

これはあなたを助けるはずです。

+0

こんにちはViki あなたのクエリは本当にうまくいきますが、非常に静的なようです。私は最後に最大17の場所を追加する予定です。ダイナミックなアプローチはより簡単になりますか? – MishMish

関連する問題