我是SSRS和SQL Server的新手,我需要以下问题的帮助:
我有两张桌子。一个包含由一小组客户购买单个产品的时间戳记录。另一个表包含该产品价格变化的时间戳记录。
表1
PurchaseDateTime - primary key
,
CustCode
,kgs
表2
Price
,ChangeDateTime
我可以使用以下查询在Tablix中显示两个表中的所有必需信息:
SELECT input.purchasedatetime,
input.custcode,
input.kgs,
price.price,
price.changedatetime
FROM input
LEFT OUTER JOIN price
ON input.purchasedatetime > price.changedatetime
但是,查询会正确返回包含已取代价格的结果。我可以隐藏那些行,但总数仍然是总和。我可以将Price.ChangeDateTime分组为第三个子组,然后在TopN上对其进行过滤,但结果是相同的。显示是正确的,总数不是,这可能是预期的,因为总数是在更高级别的分组上。 我无法将可见性条件应用于SUM(),因为它不允许聚合,我隐藏在Previous()上。 我更喜欢查询完成工作,我已经看到其他一些数据库实现了LIMIT 1子句,但这里不支持。 我仍然要在报告级别尝试自定义代码,但我对VB代码不太熟悉。
我使用SQL Server 2014 Express和Visual Studio 2013集成shell作为数据工具或BI
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用GROUP BY和MAX
获取每个购买时间的最大更改日期时间可以进一步加入这些值以获得每个购买时间的价格
with cte
as
(
SELECT input.purchasedatetime, MAX(price.changedatetime) as ChangeDateTime
FROM input
LEFT OUTER JOIN price
ON input.purchasedatetime > price.changedatetime
GROUP BY input.purchasedatetime
)
SELECT input.purchasedatetime,
input.custcode,
input.kgs,
price.price,
price.changedatetime
FROM input
JOIN cte
on input.purchasedatetime = cte.purchasedatetime
left join price
on cte.changedatetime = price.changedatetime