首先抱歉这个糟糕的标题我不知道应该怎么命名。
我有一张桌子,里面有顾客和他们买的东西。 例如:
Customer_ID | Item_ID |
--------------------------
1 | 15 |
3 | 25 |
5 | 20 |
1 | 35 |
数据库适用于像拍卖这样的系统,因此所有项目都包含所有以前价格的历史记录。 例如:
Item_ID | Price | Date
--------------------------
15 | 200 | 4/11/2015
25 | 100 | 4/11/2015
20 | 250 | 4/11/2015
35 | 350 | 4/11/2015
15 | 3000 | 5/11/2015
我所做的是我遍历每个日期并获取当前登录用户的数据
因此,对于用户1,它将是: 2015年4月11日
Customer_ID | Item_ID | Price | Date
----------------------------------------
1 | 15 | 200 | 4/11/2015
1 | 35 | 350 | 4/11/2015
和2015年5月11日
Customer_ID | Item_ID | Price | Date
----------------------------------------
1 | 15 | 3000 | 5/11/2015
我想要的是每次迭代我想获得所有用户项目,但只改变价格的价值 例如: 2015年4月11日
Customer_ID | Item_ID | Price | Status
----------------------------------------
1 | 15 | 200 | --
1 | 35 | 350 | --
和2015年5月11日
Customer_ID | Item_ID | Price | Status
----------------------------------------
1 | 15 | 3000 | UP
1 | 35 | 350 | --
我想要的是我如何在每次迭代中进行迭代,并且在每次迭代中,我将显示某个客户拥有的所有物品,无论该物品是否在该日期,以及该物品在该特定日期是否有价格我将展示它之前的最新日期。
答案 0 :(得分:1)
您可以使用:
SELECT DISTINCT c.Customer_ID, ip.Date
FROM ItemPrice AS ip
INNER JOIN Customers AS c ON ip.Item_ID = c.Item_ID
为了获得Customer_ID
的所有不同日期。
<强>输出:强>
Customer_ID Date
----------------------
1 2015-04-11
1 2015-05-11
3 2015-04-11
5 2015-04-11
您可以在CTE
中包含上述查询,然后对此LEFT JOIN
执行CTE
,以获得Item_ID
- {{1}之间的所有可能组合}:
Date
上述查询使用;WITH DatesCTE AS (
SELECT DISTINCT c.Customer_ID, ip.Date
FROM ItemPrice AS ip
INNER JOIN Customers AS c ON ip.Item_ID = c.Item_ID
)
SELECT Customer_ID, Item_ID, COALESCE(Price, prevPrice) AS Price,
CASE
WHEN prevPrice > Price THEN 'DOWN'
WHEN prevPrice = Price THEN 'EQUAL'
WHEN prevPrice < Price THEN 'UP'
ELSE '---'
END AS Status
FROM (
SELECT c.Customer_ID, c.Item_ID, dc.Date,
ip.Price,
LAG(ip.Price) OVER (PARTITION BY c.Customer_ID, c.Item_ID
ORDER BY dc.Date) AS prevPrice
FROM Customers AS c
LEFT JOIN DatesCTE AS dc ON c.Customer_ID = dc.Customer_ID
LEFT JOIN ItemPrice AS ip ON c.Item_ID = ip.Item_ID AND dc.Date = ip.Date ) AS t
ORDER BY Customer_ID, Date
来比较当前和上一个项目之间的价格。可以使用这两个值来确定结果的LAG
和Price
字段。
答案 1 :(得分:0)
这样的东西?
选择customer_id,item_id,价格
来自客户c左侧加入历史记录h在c.item_id = h.item_id
上 其中date =&#39; 2015-11-04&#39;和customer_id = 1
您的问题不明确,但left join
将为所有用户输出数据,即使指定日期没有数据。