php - 使用 LIMIT 和 BETWEEN 运算符的类似子查询的较短 SQL 语句

标签 php mysql sql select

我正在添加子查询的结果以在下面的代码中获取一月份的一行。

子查询以相同的方式提出。唯一改变的是 BETWEEN 运算符中指定的时间跨度。

有没有更短的方式来写这个 SQL 语句?因为我还想要其他月份的子查询,这样 12 个月的 SQL 将变得非常大。

所以最后我想添加子查询以获得一月、二月、三月、四月等的一行。

(我正在使用 PHP 和 MySQL。)

这是 SELECT 语句:

SELECT 
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-01 01:00:00' AND '2014-01-01 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-02 01:00:00' AND '2014-01-02 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-03 01:00:00' AND '2014-01-03 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-04 01:00:00' AND '2014-01-04 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-05 01:00:00' AND '2014-01-05 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-06 01:00:00' AND '2014-01-06 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-07 01:00:00' AND '2014-01-07 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-08 01:00:00' AND '2014-01-08 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-09 01:00:00' AND '2014-01-09 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-10 01:00:00' AND '2014-01-10 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-11 01:00:00' AND '2014-01-11 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-12 01:00:00' AND '2014-01-12 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-13 01:00:00' AND '2014-01-13 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-14 01:00:00' AND '2014-01-14 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-15 01:00:00' AND '2014-01-15 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-16 01:00:00' AND '2014-01-16 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-17 01:00:00' AND '2014-01-17 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-18 01:00:00' AND '2014-01-18 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-19 01:00:00' AND '2014-01-19 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-20 01:00:00' AND '2014-01-20 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-21 01:00:00' AND '2014-01-21 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-22 01:00:00' AND '2014-01-22 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-23 01:00:00' AND '2014-01-23 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-24 01:00:00' AND '2014-01-24 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-25 01:00:00' AND '2014-01-25 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-26 01:00:00' AND '2014-01-26 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-27 01:00:00' AND '2014-01-27 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-28 01:00:00' AND '2014-01-28 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-29 01:00:00' AND '2014-01-29 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-30 01:00:00' AND '2014-01-30 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) +
(
SELECT DaySum_1+DaySum_2+DaySum_3+DaySum_4+DaySum_5+DaySum_6+DaySum_7+DaySum_8+DaySum_9+DaySum_15
FROM   rysolarplus
WHERE DatumUhrzeit BETWEEN '2014-01-31 01:00:00' AND '2014-01-31 23:00:00'
ORDER BY DatumUhrzeit DESC
LIMIT 1
) AS january;

表格摘录:

enter image description here

最佳答案

此查询将取每天的最大值,然后按月对它们求和:

SELECT
  YEAR(TagTotalen.Tag),
  Month(TagTotalen.Tag),
  SUM(TagTotalen.TagTotal)
FROM
  (
    SELECT
      DATE(DatumUhrzeit) AS Tag,
      MAX(DaySum_1) + MAX(DaySum_2) AS TagTotal
    FROM
      rysolarplus
    GROUP BY
      DATE(DatumUhrzeit)
  ) AS TagTotalen
GROUP BY
  YEAR(TagTotalen.Tag),
  MONTH(TagTotalen.Tag)

用于演示的 SQL Fiddle:http://sqlfiddle.com/#!2/2b73b4/1/0

关于php - 使用 LIMIT 和 BETWEEN 运算符的类似子查询的较短 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208086/

相关文章:

php - 如何在网站名称上使用 Lettering.js 和 Drupal 7?

php - 在处理数千个事件时 ics 格式是个好主意吗?

php mysql数据只显示一行与foreach循环

sql - 检查字符串是否为日期 Postgresql

sql - 如何使用 mysql 连接 3 个表

sql - 我创建表格时出现“缺少关键字”错误

php - 使用 PHP 显示服务器上存在的图像

php - 如何保护我的论坛免受垃圾邮件的侵害?

mysql - 在 select 语句中替换/赋值

php - 如何将json发送到php文件以保存在服务器上