将所有出现的日期时间更新为该日期的最低日期时间值

Update all occurrences of a datetime to the lowest datetime value for that date

我有一个 table,其中包含许多日期的许多日期时间值。我需要更新我的 table 以便每个日期都更新为该日期的最低日期时间值。例如,如果这是我的 table:

Station     DateTime
Stn 1   2014-03-26 09:50:00.000
Stn 1   2014-03-26 09:52:00.000
Stn 1   2014-03-26 09:55:00.000
Stn 2   2015-12-26 11:30:00.000
Stn 2   2015-12-26 11:32:00.000
Stn 2   2015-12-26 11:35:00.000

我需要将日期时间字段更新为如下所示:

Station     DateTime
Stn 1   2014-03-26 09:50:00.000
Stn 1   2014-03-26 09:50:00.000
Stn 1   2014-03-26 09:50:00.000
Stn 2   2015-12-26 11:30:00.000
Stn 2   2015-12-26 11:30:00.000
Stn 2   2015-12-26 11:30:00.000

对于每个站点,我需要使所有日期时间值都等于该站点的最小日期时间值。我已经玩聚合函数一个多小时了,但我似乎无法理解。我试过在网上寻求帮助,但这是一个很难在搜索引擎中用词组表达的问题。

感谢任何帮助。

在 CTE 中使用 MIN() window 函数来获取站点和日期的每个组合的 Time 的最低值。
UPDATE 语句中将 table 加入 CTE:

WITH cte AS (
  SELECT *, MIN(Time) OVER (PARTITION BY Station, CONVERT(DATE, Time)) min_time
  FROM tablename
)
UPDATE t
SET t.Time = c.min_time
FROM tablename t INNER JOIN cte c 
ON c.Station = t.Station AND c.Time = t.Time;

在 SQL 服务器中,您可以使用可更新的 CTE:

with toupdate as (
      select t.*,
             min(time) over (partition station, convert(date, time)) as min_time
      from t
     )
update toupdate
    set time = min_time
    where time <> min_time;

请注意,不需要 join,并且 where 子句可防止不必要的更新。