簡體   English   中英

MySQL查詢具有兩個日期字段的同一個表,並按相同的ID分組

[英]MySQL query the same table with two date fields and group by same ID

我很難按照需要的方式從數據庫獲取結果,這是我的表:

+----+---------------------+---------------------+-----------+------------+--------+
| 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分組的所有行:

+----+---------------------+---------------------+-----------+------------+--------+
| 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 |
+----+---------------------+---------------------+-----------+------------+--------+

到目前為止,這是我嘗試過的:

(SELECT * FROM table WHERE opendate >= '2015-08-08 00:00:01') UNION (SELECT * FROM table WHERE closedate <= '2015-10-15 23:59:59')

我可以獲取所有行,但無法找到一種按sameid分組的sameid ,我嘗試使用GROUP BY sameid失敗。

希望你們能幫助我

謝謝

UPDATE該表是很早以前設計的(不是我設計的),並且存儲的信息太多,我也不允許重新設計數據庫架構。

如果您的表格格式完全符合您的描述,那么應該可以:

SELECT id,MAX(opendate),MAX(closedate),MAX(openprice),MAX(closeprice),sameid FROM table GROUP BY sameid;

但是,我認為您應該重新設計數據庫架構,將打開信息和關閉信息分成兩行(它們可以在2個表中或在同一表中)。 與嘗試一些解決方法相比,與您合作會更好。

問候,

嘗試這個

SELECT t1.opendate,t2.closedate,t1.openprice,t2.closeprice從`table` t1 JOIN`table` t2 ON t2.sameid = t1.sameid哪里t1.opendate> ='2015-08-08 00:00: 01'AND t2.closedate <='2015-10-15 23:59:59'AND t1.opendate不為空AND t2.closedate不為空

這將產生您的確切輸出。

    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM