gpt4 book ai didi

php - 我可以在mysql中使用if语句吗?

转载 作者:行者123 更新时间:2023-11-29 07:18:02 24 4
gpt4 key购买 nike

我正在尝试创建一个查询,该查询将根据价格生成他们的总使用量。我不知道这是否可能在查询中,所以在这里。

主表//这个表是全民的,所以这个是连续的,这个可以加,id列是唯一的。

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

electricity table//这个表是连续的基于main_id的,只要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

我不知道我的想法是否真的可以仅仅通过查询来实现,我真的被这个问题困住了。我在想的是在 MYSQL 中使用 IF 语句,或者这只是在查询中执行复杂操作的方法?

最佳答案

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 |

关于php - 我可以在mysql中使用if语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58162966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com