返回顶部
首页 > 资讯 > 数据库 >SQL如何求时间差之和
  • 781
分享到

SQL如何求时间差之和

2024-04-02 19:04:59 781人浏览 独家记忆
摘要

这篇文章主要介绍了sql如何求时间差之和,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目如下:求每个品牌的促销天数表sale为促销营销表,

这篇文章主要介绍了sql如何求时间差之和,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

题目如下:

求每个品牌的促销天数

表sale为促销营销表,数据中存在日期重复的情况,例如id为1的end_date为20180905,id为2的start_date为20180903,即id为1和id为2的存在重复的销售日期,求出每个品牌的促销天数(重复不算)

表结果如下:

+------+-------+------------+------------+
| id | brand | start_date | end_date |
+------+-------+------------+------------+
| 1 | nike | 2018-09-01 | 2018-09-05 |
| 2 | nike | 2018-09-03 | 2018-09-06 |
| 3 | nike | 2018-09-09 | 2018-09-15 |
| 4 | oppo | 2018-08-04 | 2018-08-05 |
| 5 | oppo | 2018-08-04 | 2018-08-15 |
| 6 | vivo | 2018-08-15 | 2018-08-21 |
| 7 | vivo | 2018-09-02 | 2018-09-12 |
+------+-------+------------+------------+

最终结果应为

brandall_days
nike13
oppo12
vivo18

建表语句

-- ----------------------------
-- Table structure for sale
-- ----------------------------
DROP TABLE IF EXISTS `sale`;
CREATE TABLE `sale` (
 `id` int(11) DEFAULT NULL,
 `brand` varchar(255) DEFAULT NULL,
 `start_date` date DEFAULT NULL,
 `end_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sale
-- ----------------------------
INSERT INTO `sale` VALUES (1, 'nike', '2018-09-01', '2018-09-05');
INSERT INTO `sale` VALUES (2, 'nike', '2018-09-03', '2018-09-06');
INSERT INTO `sale` VALUES (3, 'nike', '2018-09-09', '2018-09-15');
INSERT INTO `sale` VALUES (4, 'oppo', '2018-08-04', '2018-08-05');
INSERT INTO `sale` VALUES (5, 'oppo', '2018-08-04', '2018-08-15');
INSERT INTO `sale` VALUES (6, 'vivo', '2018-08-15', '2018-08-21');
INSERT INTO `sale` VALUES (7, 'vivo', '2018-09-02', '2018-09-12');

方式1:

利用自关联下一条记录的方法

select brand,sum(end_date-befor_date+1) all_days from 
 (
 select s.id ,
  s.brand ,
  s.start_date ,
  s.end_date , 
  if(s.start_date>=ifnull(t.end_date,s.start_date) ,s.start_date,DATE_ADD(t.end_date,interval 1 day) ) as befor_date
 from sale s left join (select id+1 as id ,brand,end_date from sale) t on s.id = t.id and s.brand = t.brand
 order by s.id
 )tmp
 group by brand

运行结果

+-------+---------+
| brand | all_day |
+-------+---------+
| nike |  13 |
| oppo |  12 |
| vivo |  18 |
+-------+---------+

该方法对本题中的表格有效,但对于有id不连续的品牌的记录时不一定适用。

方式2:

SELECT a.brand,SUM(
 CASE 
  WHEN a.start_date=b.start_date AND a.end_date=b.end_date
  AND NOT EXISTS(
  SELECT *
  FROM sale c LEFT JOIN sale d ON c.brand=d.brand 
   WHERE d.brand=a.brand
   AND c.start_date=a.start_date
   AND c.id<>d.id 
   AND (d.start_date BETWEEN c.start_date AND c.end_date AND d.end_date>c.end_date
   OR 
  c.start_date BETWEEN d.start_date AND d.end_date AND c.end_date>d.end_date)
    ) 
   THEN (a.end_date-a.start_date+1) 
  WHEN (a.id<>b.id AND b.start_date BETWEEN a.start_date AND a.end_date AND b.end_date>a.end_date ) THEN (b.end_date-a.start_date+1)
  ELSE 0 END
  ) AS all_days 
FROM sale a JOIN sale b ON a.brand=b.brand GROUP BY a.brand

运行结果

+-------+----------+
| brand | all_days |
+-------+----------+
| nike |  13 |
| oppo |  12 |
| vivo |  18 |
+-------+----------+

其中条件

d.start_date BETWEEN c.start_date AND c.end_date AND d.end_date>c.end_date
   OR 
c.start_date BETWEEN d.start_date AND d.end_date AND c.end_date>d.end_date

可以换成

c.start_date < d.end_date AND (c.end_date > d.start_date)

结果同样正确

用分析函数同样可行的,自己电脑暂时没装oracle,用的Mysql写的。

感谢你能够认真阅读完这篇文章,希望小编分享的“SQL如何求时间差之和”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: SQL如何求时间差之和

本文链接: https://lsjlt.com/news/57306.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL如何求时间差之和
    这篇文章主要介绍了SQL如何求时间差之和,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目如下:求每个品牌的促销天数表sale为促销营销表,...
    99+
    2024-04-02
  • mysql如何求时间差
    这篇文章主要介绍了mysql如何求时间差,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 mysql求时间差的方法...
    99+
    2024-04-02
  • python如何求两个时间的时间差
    这篇文章主要介绍“python如何求两个时间的时间差”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python如何求两个时间的时间差”文章能帮助大家解决问题。计算两个时间的时间差:from ...
    99+
    2023-07-04
  • 如何用js代码求时间差
    这篇文章主要介绍“如何用js代码求时间差”,在日常操作中,相信很多人在如何用js代码求时间差问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用js代码求时间差”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • php时间戳如何实现求差
    这篇文章主要讲解了“php时间戳如何实现求差”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php时间戳如何实现求差”吧!PHP时间戳求差——掌握常用时间戳函数时间戳是用于表示日期和时间的一种...
    99+
    2023-07-05
  • mysql怎么求时间差
    mysql求时间差的方法: 1、使用TIMEDIFF()函数 TIMEDIFF(dt1, dt2):计算两个TIME或DATETIME值之间的差值,两个必须为相同类型的参数,即TIME或DATETIME。 TIMEDIFF函数返回表示为时间...
    99+
    2023-08-22
    mysql 数据库
  • MySQL去除重叠时间求时间差和的实现
    目录需求: 开车:思路:实现:              &nbs...
    99+
    2022-05-16
    MySQL 时间差和 MySQL 两个时间的时间差
  • Google Cloud SQL 和 Cloud Spanner 之间的差异
    Cloud SQL 和 Cloud Spanner 是在 GCP 上运行的基于云的解决方案的示例。您可以使用公共云中提供的各种服务来扩展数据库。在比较云数据库时,必须考虑“NoSQL”和“SQL”数据库之间的显着区别。我们将比较 Cloud...
    99+
    2023-10-22
  • SQL两条记录的时间差如何计算
    在SQL中计算两条记录的时间差可以使用DATEDIFF()函数。假设你有一个包含时间戳的表,可以使用以下查询来计算两条记录的时间差:...
    99+
    2024-04-08
    SQL
  • python求两个时间的时间差(实例代码)
    我们在用python进行分析的时候,可能会碰到计算两个日期的时间差。下面为大家介绍一下如何计算两个时间的时间差: from dateutil.parser import parse ...
    99+
    2022-11-13
    python求时间差 python怎么计算时间差 python时间差
  • php时间戳怎么实现求差
    PHP时间戳求差——掌握常用时间戳函数时间戳是用于表示日期和时间的一种计数方法。在PHP中,时间戳是指自1970年1月1日零时零分零秒起至当前时间的总秒数。由于时间戳是一种通用的时间表示方法,PHP为我们提供了一系列的函数来方便地应用它们。...
    99+
    2023-05-14
    php
  • nodejs如何获取时间戳与时间差
    Nodejs中获取时间戳的方法有很多种,例如: 1.new Date().getTime() 2.Date.now() 3.process.uptime() 4....
    99+
    2022-06-04
    时间差 时间 nodejs
  • MySQL 中如何计算两个时间值之间的差异?
    借助 TIMEDIFF() MySQL 函数,可以计算两个时间值之间的差异。示例mysql> Select TIMEDIFF('04:05:45','03:05:45') AS ‘Diffe...
    99+
    2023-10-22
  • oralce如何计算时间差
    这篇文章主要介绍oralce如何计算时间差,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!oralce 计算时间差的实现查询系统时间和给定时间相差的毫秒数 selec ...
    99+
    2024-04-02
  • js如何计算时间差
    这篇“js如何计算时间差”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“js如何计算时间差”...
    99+
    2024-04-02
  • python如何计算时间差
    小编给大家分享一下python如何计算时间差,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python计算时间差的方法:首先引入datetime包;然后通过“(t...
    99+
    2023-06-06
  • php如何实现时间差
    这篇“php如何实现时间差”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现时间差”文章吧。php实现时间差的方法...
    99+
    2023-07-05
  • oracle如何计算时间差
    在Oracle中,可以使用以下函数来计算时间差: 使用DATEDIFF函数:DATEDIFF函数可以计算两个日期之间的时间差,单位...
    99+
    2024-04-09
    oracle
  • 如何用 Golang 处理时区与 UTC 之间的差异?
    在 golang 中,处理时区和 utc 差异至关重要。通过使用 time.location 类型表示时区,并使用 in 方法转换时间,可以轻松实现此操作。此外,可以通过使用 loadl...
    99+
    2024-05-21
    时区 utc golang
  • JS如何计算距当前时间的时间差
    这篇文章主要介绍JS如何计算距当前时间的时间差,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如下所示: function get_time_diff(time) ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作