2016-11-22 77 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

'选择 '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; 

下面是上面的查询

enter image description here

对于requirement2的结果,

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; 

下面是上面的查询

enter image description here

注的结果:如果是的ProdID整数上述查询才有效。

希望这可以帮助你。

+0

您好Viki 您的查询工作真的很好,但它似乎非常静态。我计划在最后加起来最多17个地点。动态的方法会使它更容易? – MishMish