2015-10-14 95 views
0

我有一个表,如下在数据库中,我该怎么写SQL显示预期的结果?SQL - 我怎么能算天当前行比较于1行?

  • FIRST_DATE:上表的顺序第一order_date进行按ORDER_DATE ASC
  • days_to_date:(order_date的 - FIRST_DATE)天

我的表数:

id | order_date | order_ref 
---+------------------------ 
1 | 2015-03-01 | BC101 
2 | 2015-03-01 | BC102 
3 | 2015-03-02 | BC103 
4 | 2015-03-03 | BC104 

预期结果:

id | order_date | first_date | days_to_date 
---+------------+------------+------------- 
1 | 2015-03-01 | 2015-03-01 | 0 
2 | 2015-03-01 | 2015-03-01 | 0 
3 | 2015-03-02 | 2015-03-01 | 1 
4 | 2015-03-03 | 2015-03-01 | 2 

其他说明:

  • 我使用HSQLDB 2.0.0,但更喜欢解决越来越显示在一般情况下,每行FIRST_DATE的问题,如果可能的话

在此先感谢

+0

我觉得这是低效的。一个更好的解决办法是计算它,当你插入并将其存储在一个单独的列,假设第一次约会从不改变。 – duffymo

回答

1

尝试

select id, order_date, 
     (select min(order_date) from your_table) as first_date, 
     datediff('day', (select min(order_date) from your_table), order_date) as days_to_date 
from your_table 
order by order_date 
+0

太棒了!选择分钟(order_date的)解决了这个问题:d – Max

+1

见,性能明智的,它是更好地得到最小(order_date的)的一个变量,然后在SELECT语句中使用这个变量。 –

+0

@OSAMAORABI:你怎么知道的?如果优化器工作良好,则在一个查询中执行操作可能会更快。 –