我的数据库中有两个表:
表1:购买物品
Item | Qnt | Rate |Total
Meat | 1 | 20 | 20
Fish | 0.5 | 30 | 15
Chicken|1 | 25 | 25
Meat | 2 | 20 | 40
Table2: Trading Price
Item | Datetime | Price
Meat | 2013-02-20 10:00:00 | 20
Meat | 2013-02-20 09:00:00 | 18
Meat | 2013-02-19 08:00:00 | 21
Fish | 2013-02-19 09:00:00 | 15
Fish | 2013-02-19 08:00:00 | 17
Chicken|2013-02-20 09:00:00|26
Chicken|2013-02-20 08:00:00|25
表1列出了购买的物品,表2每小时更新一次每件物品的当前价格。因此,从表2中可以清楚地看出,肉类最后一次交易是在2013年2月20日上午10点,而鱼类不是在同一天交易的,它是在2013年2月19日上午9点交易的,鸡肉是在2013年2月20日上午9点交易的。我想做的是,列出表1中的所有项目,并加入表2中各个项目的最后交易价格,如下所示:
Output:
Item | Qty | Total | Last Trade Price
Meat | 1 | 20 | 20
Meat | 2 | 40 | 20
Fish | 0.5 |15 | 15
Chicken|1 |25 |26
这里应该应用什么类型的连接和什么子句来获得理想的输出?我尝试了这个查询:SELECT p。项目,p.Qntl.pricefrom Table1 as p INNER JOIN Table2 as l ON p.项目=l.项目WHERE l.Datetime=(SELECT max(Datetime)from Table2);但是通过此查询,我没有找到所需的结果,因为每个项的最大Datetime不相同,这就是为什么输出中缺少项。
那么在WHERE子句中应该应用什么连接类型和什么条件来获得上述输出呢?
尝试此查询:
SELECT p.Item, p.Qnt, LatestPriceTable.price FROM Table1 as p
INNER JOIN
(SELECT Table2.Item, Table2.Price FROM Table2 INNER JOIN
(SELECT Item, MAX(DateTime) FROM Table2
GROUP BY Item) AS A ON Table2.Item = A.Item) AS LatestPriceTable
ON p.Item=LatestPriceTable.Item
最内部的查询从表2中按项分组选择项MAX(DateTime)
将为每个项
输出最新的DateTime
。我们将这个结果称为A。现在我们将A与表2连接起来,以获得这些最新日期的Price
列值。生成的名为LatestPriceTable的表将只包含项目名称和最新价格。现在您可以简单地将其与表1连接起来进行计算。
我确实有一种感觉,你设计的系统对于你想要实现的目标来说可能不够好。它是一种库存类型的应用程序吗?我看到的问题是,你总是用当前的库存量乘以最新的市场价格。实际上,股票几乎总是包含在不同日期以不同价格进行的购买。
但话说回来,我不确定你的确切目的,所以也许你可以接受你正在做的事情。
问题内容: 我在node.js中编写一个函数来查询PostgreSQL表。 如果该行存在,我想从该行返回id列。 如果不存在,我想将其插入并返回ID()。 我一直在尝试和语句的变体,但似乎无法使其正常工作。 问题答案: 我建议在数据库端进行检查,然后将ID返回给nodejs。 例子: 而不是在Node.js端(在此示例中,我使用的是node-postgres):
我希望在调用/退出子func时结束父func中的执行
问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识
我正在查询URI以从web服务获取一些数据。那很好。但我注意到,我的json hase多页的page\u计数,但只返回第一页数据。 以下是json的样子: 如何返回所有页面而不是只返回第一页?我知道这可能不是个好主意,但我该怎么做? 更新:web服务的URI类似于: 谢谢
问题内容: 我有两个文件:script1.py和script2.py。我需要从script1.py调用script2.py,然后将script2.py的值返回给script1.py。但是要注意的是script1.py实际上通过os运行script2.py。 script1.py: script2.py 如您所见,我能够将值输入到script2中,但不能返回到script1中。我怎样才能做到这一点?
问题内容: 我们有一个表格,其形式为: 我们需要将其转化为。 是否有一个聪明的方法可以在一个SELECT语句中执行此操作(即不使用UNION)?列名称Value1,Value2和Value3是固定的且恒定的。 该数据库是oracle 9i。 问题答案: 这适用于Oracle 10g: 我认为Oracle 9i有递归查询吗?无论如何,我非常确定它具有CASE支持,因此即使它没有递归查询,也可以执行“