使用内部SELECT

时间:2016-09-30 12:39:45

标签: sql sqlite

我有3个表,我有查询显示新表,其中每一行都填充了:

SELECT rov.*
FROM   report_or_vals  rov
WHERE  rov.or_group_indice_id = 1
AND    report_date BETWEEN ? AND ? 

因此,第二行将是:

SELECT rov.*
FROM   report_or_vals  rov
WHERE  rov.or_group_indice_id = 2
AND    report_date BETWEEN ? AND ? 

问题make是我放置NSDate对象(iOS,objective-c对象作为保留日期)的地方。

我的问题是,如何修改此查询以显示其他列?哪个值应该等于:(上面的语句中的行值) - (后面的行值语句),其后的语句是类似的语句,但日期减少了一天。

所以,如果我今天的行值等于10,前一天等于7,我希望我的语句包含类似:column_today_value(等于10),column_difference_value(等于3(10-7))

如何用SQL语言实现这一目标?对不起,我是iOS开发者。并且不太熟悉SQL函数。但我希望这实际上是一件容易的事。

2 个答案:

答案 0 :(得分:2)

我理解的问题是: 我们如何显示每日价值清单以及每天价值与前一天价值之间的差异

我使用自我联接来完成此任务。

SELECT      [TODY].value                    AS  [VALUE]
,           [YEST].value                    AS  [PREV_VALUE]
,           [TODY].value - [YEST].value     AS  [DIFFERENCE]
,          '[TODY].value - [YEST].value = ' 
          + CAST([TODY].value - [YEST].value 
                 AS varchar
                 )                          AS  [WHATS_HAPPENING]
,           [YEST].* 
FROM        report_or_vals                  AS  [YEST]
INNER JOIN  report_or_vals                  AS  [TODY]
    ON      [YEST].date = DATE([TODY].DATE,'-1 day') 
/*  IF YOU COMMENT THE WHERE CLAUSE YOU WILL SEE VALUES FOR ALL THE DAYS
WHERE       [TODY].or_group_indice_id = 2
        AND report_date BETWEEN ? AND ?
*/

这是你想要的吗?

答案 1 :(得分:1)

我希望以下解决方案适合您。

SELECT rov.* , rov.vals - (select row.vals from report_or_vals where report_or_vals.date = (NSDate - 1)) FROM report_or_vals rov WHERE rov.or_group_indice_id = 2 AND report_date BETWEEN ? AND ?