2017-02-20 401 views
-2
Table Orders 
order_id 
timestamp 

Table OrderLines 
orderlines_id 
order_id 

的样本数据获取过去30天以便与时间戳

Order表

order_id tmestamp 
     1 2017-01-10 17:47:25 
     2 2017-01-21 17:53:39 
     3 2017-01-21 17:55:04 
     4 2017-01-21 18:16:30 
     5 2016-12-21 18:17:12 

的样本数据OrderLine的

orderlines_id order_id 
      1  1 
      2  2 
      3  3 
      4  4 
      5  5 

我希望看到订单的last30天从今天和当前时间开始。我不确定我的查询是否正常工作。

方法1:

SELECT 
o.timestamp 
,ol.retail_price 
FROM orders o, 
mpos.orderlines ol 
where o.timestamp between now() - INTERVAL 30 day and now() 
group by o.order_id; 

根据样本数据下,它只返回一个记录在那里,因为它应该返回不止一个。

2017-01-10 17:47:25 

方法2:

SELECT 
o.timestamp 
,ol.retail_price 
FROM orders o, 
mpos.orderlines ol 
where o.order_id = ol.order_id 
AND ol.order_status_id = 1 
AND now() - INTERVAL 1 MONTH; 

该查询返回了我更多的行也是在此之前超过30天到今天的日期和时间的推移数据。请参考下面

结果:

2017-01-10 17:47:25 
    2017-01-21 17:53:39 
    2017-01-21 17:55:04 
    2017-01-21 18:16:30 
    2016-12-21 18:17:12 
+0

假设未来没有订单? – Strawberry

+0

有趣,但我指的是过去30天:P – Haris

+0

这不是一个玩笑。这只是问题。 – Strawberry

回答

0

获取过去30天的订单

SELECT o.`timestamp`, ol.retail_price 
FROM orders AS o 
JOIN mpos.orderlines AS ol ON o.order_id = ol.order_id 
WHERE ol.order_status_id = 1 
AND datediff(now(), o.`timestamp`) < 30 
+0

谢谢,这与我在做什么不一样吗?通过基于此的外观,我写的查询产生相同的结果 – Haris

+0

您的原始2个SQL不正确 – SIDU

-1

这是因为在第二种方法你不检查,如果时间戳是在一段时间内的...

试试这个,看看它是否给你同样的结果

SELECT 
o.timestamp 
,ol.retail_price 
FROM orders o, 
mpos.orderlines ol 
where o.order_id = ol.order_id 
AND ol.order_status_id = 1 
AND ol.timestamp between now() and now() - INTERVAL 1 MONTH; 
+0

'SELECT 2 BETWEEN 3 AND 1' – Strawberry