У меня есть таблица:
| date | x |
|------------+---|
| 2020-09-09 | 1 |
| 2020-09-09 | 2 |
| 2020-10-10 | 3 |
| 2020-10-10 | 4 |
| 2020-10-10 | 5 |
| 2020-11-11 | 6 |
| 2020-11-11 | 7 |
Используя язык SQL (диалект BigQuery), мне нужно добавить один столбец date_today_max
, чтобы он копировал все данные из столбца date
, но для записей с последним date
(что означает max(date)
) он заменит дату на current_date
:
| date | date_today_max | x |
|------------+----------------+---|
| 2020-09-09 | 2020-09-09 | 1 |
| 2020-09-09 | 2020-09-09 | 2 |
| 2020-10-10 | 2020-10-10 | 3 |
| 2020-10-10 | 2020-10-10 | 4 |
| 2020-10-10 | 2020-10-10 | 5 |
| 2020-11-11 | 2020-11-15 | 6 |
| 2020-11-11 | 2020-11-15 | 7 |
с Python + Pandas я бы добился подобного с
In [23]: from datetime import datetime
In [24]: import pandas as pd
In [25]: d = pd.date_range("2020-10-10","2020-10-15",freq="1d")
In [26]: df = pd.DataFrame(zip(d,[1,2,3,4,5,6]), columns=['date','x'])
In [27]: df['date_today_max'] = df['date'].replace(df['date'].max(),datetime.now().replace(hour=0,minute=0,second=0,microsecond=0))
In [28]: df
Out[28]:
date x date_today_max
0 2020-10-10 1 2020-10-10
1 2020-10-11 2 2020-10-11
2 2020-10-12 3 2020-10-12
3 2020-10-13 4 2020-10-13
4 2020-10-14 5 2020-10-14
5 2020-10-15 6 2020-11-15
но я понятия не имею, как решить эту проблему с помощью SQL. Есть функция replace
, но она принимает в качестве параметров только строки.