用于select语句的sql查询

时间:2012-03-19 08:31:05

标签: sql select db2

需要帮助/指导sql select查询,我有2个表库存和stock_history,库存中会有库存的初始值 在更新库存表之前,stock_history将从库存表中插入第一个,我的情况是需要根据选择日期获取库存状态, 这是为了跟踪未结库存余额和关闭库存余额,只需从表库中获取数据即可轻松实现库存平衡 对于特定时间戳,但关键部分是何时获取开放式库存余额的数据,其中需要跟踪特定时间戳的状态, 这只能通过引用历史表来完成,所以我需要sql,需要从stock和stock_history中选择数据

status table
id  desc
--  ----
01  consignment
02  customer
03  bank
04  safekeep
05  exit

stock
-----
ref_no   serial_no      status  timeStamp
1        001            04        2012-03-01 09:03:00

stock_history
-------------
ref_no   serial_no  status  timeStamp
1        001        01      2012-03-01 09:00:00
1        001        03      2012-03-01 09:01:00
1        001        02      2012-03-01 09:02:00

 so, when choose for date 
 01/03/12 time 9:01   =   1    001  03  2012-03-01 09:01:00
 01/03/12 time 9:01   =   1    001  03  2012-03-01 09:01:00

请提前帮助,请提供帮助

2 个答案:

答案 0 :(得分:3)

您可以使用UNION运算符从多个表中进行选择:

SELECT * FROM stock
UNION ALL
SELECT * FROM stock_history
WHERE ...

那就是说,我建议重构你的架构。为什么有一个单独的“股票”和“stock_history”表?您实际上只需要一个“库存”表来存储两者 - “当前”库存只是具有最高状态的库存。或者你甚至可以明确地保持一个“is_current”标志行。

更新:将UNION更改为UNION ALLALL表示只组合两个表的行,无需额外处理。将其关闭将尝试首先删除任何重复的行,这可能效率较低(并且这里的结果没有任何区别,因为您的模式无法进行重复)。 Hat tip到@SmartestVEGA。

答案 1 :(得分:2)

SELECT * FROM stock
UNION ALL
SELECT * FROM stock_history
WHERE ...

也有效!