簡體   English   中英

選擇范圍在最大值內的行

[英]Selecting rows with max value in range

我有以下數據:

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  1 |       1 | 2013-11-01 23:59:59 |    12 |
|  2 |       1 | 2013-11-02 23:59:59 |    15 |
|  3 |       1 | 2013-11-03 23:59:59 |    18 |
|  4 |       1 | 2013-11-04 23:59:59 |    29 |
|  5 |       1 | 2013-11-05 23:59:59 |    38 |
|  6 |       1 | 2013-11-05 12:59:59 |    40 |
|  7 |       1 | 2013-11-06 23:59:59 |    45 |
|  8 |       1 | 2013-11-07 23:59:59 |    49 |
|  9 |       1 | 2013-11-08 23:59:59 |    52 |
| 10 |       2 | 2013-11-04 23:59:59 |    25 |
| 11 |       2 | 2013-11-05 21:59:59 |    42 |
| 12 |       2 | 2013-11-06 23:59:59 |    60 |
| 13 |       2 | 2013-11-07 23:59:59 |    75 |
| 14 |       2 | 2013-11-08 23:59:59 |    86 |
| 15 |       2 | 2013-11-09 23:59:59 |    90 |
| 16 |       2 | 2013-11-10 23:59:59 |    92 |
| 17 |       2 | 2013-11-11 23:42:59 |    98 |
+----+---------+---------------------+-------+

我希望通過一天,希望獲得給定日期中時間最長的行,或者如果該站點在這一天中沒有記錄,則為過去的最后一行。

例如對於2013-11-01

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  1 |       1 | 2013-11-01 23:59:59 |    12 |
+----+---------+---------------------+-------+

2013-11-05

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  5 |       1 | 2013-11-05 23:59:59 |    38 |
| 11 |       2 | 2013-11-05 21:59:59 |    42 |
+----+---------+---------------------+-------+

而對於2013-11-10

+----+---------+---------------------+-------+
| id | site_id |      datetime       | views |
+----+---------+---------------------+-------+
|  9 |       1 | 2013-11-08 23:59:59 |    52 |
| 16 |       2 | 2013-11-10 23:59:59 |    92 |
+----+---------+---------------------+-------+

提前致謝。

您可以嘗試以下方法:

SELECT a.id,a.site_id,b.maxDate,a.views
FROM table1 a
INNER JOIN (
    SELECT  site_id ,MAX(datetime) as maxDate
    FROM table1
    WHERE datetime < DATEYOUWANTTOSEE + INTERVAL 1 DAY
    GROUP BY site_id
) b ON a.site_id = b.site_id AND a.datetime = b.maxDate 

內部查詢將為您獲取每個site_id的MAX(datetime)。 然后,將其與表連接起來以獲取其余信息。

sqlfiddle演示

SELECT * FROM <tablename> WHERE datetime = <datetime> ORDER BY datetime DESC LIMIT 2

我相信這應該有效:

SELECT SUBSTRING(`datetime`, 1, 10) AS date, MAX(`views`)
FROM table
GROUP BY SUBSTRING(`datetime`, 1, 10)

如果還需要id / site_id,請將其寫在您的帖子中,因為目前尚不清楚

SQLFiddle向您顯示結果: http ://sqlfiddle.com/#!2/e0ccb3/1

您的數據和示例並沒有真正匹配它們,也沒有描述,但您可能正在尋找的是:

Select top 1 * 
  from table
 where date(datetime) <= date(@PARAMETER)

按日期時間順序排序

暫無
暫無

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

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