我可以在MySQL中使用if语句吗?

时间:2019-09-30 07:04:30

标签: php mysql codeigniter

我正在尝试创建一个查询,该查询将生成其使用总量(取决于价格)。我不知道在查询中是否可行,所以在这里。

主表//此表适用于所有人员,因此这是连续的,可以添加,ID列是唯一的。

 id          price       date_created
 25           8.5         2019-08-16
 26           11.5        2019-08-01

电表//此表是基于main_id的连续表,只要该Main table表每天都有usage表存在main_id,存在于主表中。就像日常使用的电力一样。

id    main_id           current_usage  date_generated
1         25                10         2019-08-16     
2         25                10         2019-08-17
3         25                10         2019-08-18
4         25                10         2019-08-19
5         25                10         2019-08-20
6         25                10         2019-08-21
7         26                20         2019-08-01
8         26                 5         2019-08-02
9         26                 5         2019-08-03
10        26                10         2019-08-04

我的查询

SELECT main.id
     , main.price
     , SUM(electricity.current_usage)*main.price total_generated
     , electricity.date_generated
  FROM main AS main
 INNER JOIN electricity AS electricity
    ON main.id = electricity.main_id
 GROUP 
    BY MONTH(electricity.date_generated);

在这里我没有问题,因为我要到达这里只是一个就是一个。

所以输出将是

id             price        total_genereated
25              8.5              510
26              11.5             460   

这是我的问题所在,这是我卡住的地方

有一个price_history表,该表的目的是,价格可以随时更改Main table中该main_id。

id  main_id    changed_price            price_date_changed
1      25             15                    2019-08-18
2      26             20                    2019-08-03

而不是仅获得两行。由于价格历史记录,我需要在这里显示4行。价格已经改变。

样本输出

id             price        total_genereated          date_range
25              8.5              170            2019-08-16 - 2019-08-17
25              15               600            2019-08-18 - 2019-08-21 
26              11.5             287            2019-08-01 - 2019-08-02
26              20               300            2019-08-03 - 2019-08-04    

我不知道我的想法是否真的可能,仅通过在Query上执行就可以了,我真的陷入了这个问题。我在想的是在MYSQL中使用IF语句,还是在Query中做复杂的事情?

1 个答案:

答案 0 :(得分:1)

SQL DEMO

首先,您需要将所有价格汇总在一起:

SELECT id as main_id, price, date_created
FROM main

UNION

SELECT main_id, changed_price, price_date_changed
FROM price_history
ORDER BY main_id, date_created;

输出

| main_id | price | date_created |
|---------|-------|--------------|
|      25 |     9 |   2019-08-16 |
|      25 |    15 |   2019-08-18 |
|      26 |    12 |   2019-08-01 |
|      26 |    20 |   2019-08-03 |

现在使用相关子查询查找最新价格:

SELECT id, main_id, current_usage, date_generated,
       ( SELECT price
         FROM ( SELECT id as main_id, price, date_created
                FROM main
                UNION
                SELECT main_id, changed_price, price_date_changed
                FROM price_history
              ) prices
         WHERE prices.main_id = electricity.main_id
           AND prices.date_created <= electricity.date_generated
         ORDER BY prices.date_created DESC
         LIMIT 1 ) as price
FROM electricity
ORDER BY main_id, date_generated;   

输出

| id | main_id | current_usage | date_generated | price |
|----|---------|---------------|----------------|-------|
|  1 |      25 |            10 |     2019-08-16 |     9 |
|  2 |      25 |            10 |     2019-08-17 |     9 |
|  3 |      25 |            10 |     2019-08-18 |    15 |
|  4 |      25 |            10 |     2019-08-19 |    15 |
|  5 |      25 |            10 |     2019-08-20 |    15 |
|  6 |      25 |            10 |     2019-08-21 |    15 |
|  7 |      26 |            20 |     2019-08-01 |    12 |
|  8 |      26 |             5 |     2019-08-02 |    12 |
|  9 |      26 |             5 |     2019-08-03 |    20 |
| 10 |      26 |            10 |     2019-08-04 |    20 |
相关问题