首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL使用两个日期字段查询相同的表,并按相同的ID进行分组

MySQL使用两个日期字段查询相同的表,并按相同的ID进行分组
EN

Stack Overflow用户
提问于 2015-10-16 01:55:54
回答 3查看 184关注 0票数 0

我很难从数据库中得到我需要的结果,这是我的表:

代码语言:javascript
运行
复制
+----+---------------------+---------------------+-----------+------------+--------+
| id |      opendate       |      closedate      | openprice | closeprice | sameid |
+----+---------------------+---------------------+-----------+------------+--------+
|  1 | 2015-09-20 19:17:52 | NULL                | 10        | NULL       |     20 |
|  2 | NULL                | 2015-09-20 20:17:00 | NULL      | 35         |     20 |
|  3 | 2015-09-15 19:17:52 | NULL                | 15        | NULL       |     10 |
|  4 | NULL                | 2015-09-16 20:17:00 | NULL      | 25         |     10 |
+----+---------------------+---------------------+-----------+------------+--------+

我需要按列sameid分组所有行,如下所示:

代码语言:javascript
运行
复制
+----+---------------------+---------------------+-----------+------------+--------+
| id |      opendate       |      closedate      | openprice | closeprice | sameid |
+----+---------------------+---------------------+-----------+------------+--------+
|  1 | 2015-09-20 19:17:52 | 2015-09-20 20:17:00 |        10 |         35 |     20 |
|  3 | 2015-09-15 19:17:52 | 2015-09-16 20:17:00 |        15 |         25 |     10 |
+----+---------------------+---------------------+-----------+------------+--------+

到目前为止,我尝试过这样的方法:

代码语言:javascript
运行
复制
(SELECT * FROM table WHERE opendate >= '2015-08-08 00:00:01') UNION (SELECT * FROM table WHERE closedate <= '2015-10-15 23:59:59')

我可以得到所有的行,但我无法找到按sameid对它们进行分组的方法,我尝试了使用GROUP BY sameid,但没有成功。

希望你们能帮我

谢谢

UPDATE表是很久以前设计的(不是我设计的),存储的信息太多了,我也不允许重新设计DB模式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-16 02:10:18

如果您的表格格式与您所描述的完全相同,那么这应该可以:

从表组中按sameid从表组中选择id、MAX(开放式)、MAX(closedate)、MAX(开放价格)、MAX(closeprice)、sameid;

但是,我认为您应该重新设计您的数据库模式,将open info和close info分离为2行(它们可以在2个表中或在同一个表中)。与其尝试一些解决办法,不如与其一起工作。

致以敬意,

票数 2
EN

Stack Overflow用户

发布于 2015-10-16 02:10:08

尝尝这个

选择t1.opendate,t2.closeate,t1.openprice,t2.closeprice,table t1 JOIN table t2 ON t2.sameid = t1.sameid,其中t1. t1.opendate >= '2015-08-08 00: 00:00:01‘和t2.closeate <= '2015-10-15 23:59:59’和t1。

票数 0
EN

Stack Overflow用户

发布于 2015-10-16 02:24:44

这将产生您的确切输出。

代码语言:javascript
运行
复制
    SELECT
        MIN(id) as id,
        MAX(open_date) as open_date,
        MAX(close_date) as close_date,
        MAX(open_price) as open_price,
        MAX(close_price) as close_price,
        sameid
    FROM
        `table`
    GROUP BY
        sameid
    ORDER BY id ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33161351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档