gpt4 book ai didi

mysql - 使用多个条件选择记录

转载 作者:行者123 更新时间:2023-11-29 11:12:37 25 4
gpt4 key购买 nike

我有一个名为 all_data 的表,其中包含日期、值和其他字段。

我需要从数据库中选择最近 7 天、14 天和 30 天。可以有多个具有相同日期的条目,例如

date      value
10-25-16 30
10-25-16 24
10-26-16 42

这是我的 SELECT 语句,运行时间不到 30 天

$sql = "SELECT type_entry, COUNT(value) as val_count, FLOOR(SUM(value)) as sum_glu FROM all_data
WHERE DATEDIFF(NOW(), date) < 30 AND type_entry = 'Glucose'
ORDER BY date";

我想再执行两次相同的查询,但将 DATEDIFF 语句更改为 <14 和 <7,因此我最终得到 val_count1、val_count2、val_count3、sum_glu1、sum_glu2、sumglu3 我将使用它们来计算每个值的平均值。

我不知道足够的 SQL 来弄清楚如何做到这一点。

这里是阅读示例

10/17/2016 116
10/17/2016 277
10/17/2016 145
10/18/2016 150
10/18/2016 125
10/19/2016 200

我需要 2016 年 10 月 19 日以来 7 天的记录数,然后我可以计算每周的读数平均值。

enter image description here

最佳答案

您可以在此处使用条件聚合:

SELECT type_entry,
SUM(CASE WHEN DATEDIFF(NOW(), date) < 30 THEN 1 ELSE 0 END) AS val_count_30,
FLOOR(SUM(CASE WHEN DATEDIFF(NOW(), date) < 30 THEN value ELSE 0 END)) AS sum_glu_30,
SUM(CASE WHEN DATEDIFF(NOW(), date) < 14 THEN 1 ELSE 0 END) AS val_count_14,
FLOOR(SUM(CASE WHEN DATEDIFF(NOW(), date) < 14 THEN value ELSE 0 END)) AS sum_glu_14,
SUM(CASE WHEN DATEDIFF(NOW(), date) < 7 THEN 1 ELSE 0 END) AS val_count_7,
FLOOR(SUM(CASE WHEN DATEDIFF(NOW(), date) < 7 THEN value ELSE 0 END)) AS sum_glu_7
FROM all_data
WHERE type_entry = 'Glucose'
ORDER BY date

如果您只想要从 10/19/2016 开始的 7 天的 value 平均值,那么您可以使用 WHERE 子句:

SELECT type_entry,
AVG(value) AS avgValue
FROM all_data
WHERE date BETWEEN '2016-10-19' AND DATE_ADD('2016-10-19', INTERVAL 7 DAY) AND
type_entry = 'Glucose'
GROUP BY type_entry

关于mysql - 使用多个条件选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40273906/

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