Sql 使用基于另一个datetime列的值添加datetime列
我有一张桌子:Sql 使用基于另一个datetime列的值添加datetime列,sql,pandas,google-bigquery,Sql,Pandas,Google Bigquery,我有一张桌子: | 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\u today\u max,这样它可以复制date列中的所有数据,但对于最新
| 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\u today\u max
,这样它可以复制date
列中的所有数据,但对于最新日期的记录(意思是max(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,我可以实现与
[23]中的:从日期时间导入日期时间
在[24]中:导入熊猫作为pd
在[25]中:d=pd.日期范围(“2020-10-10”、“2020-10-15”,freq=“1d”)
在[26]中:df=pd.DataFrame(zip(d[1,2,3,4,5,6]),列=['date','x']
在[27]中:df['date\u today\u max']=df['date'].max(),datetime.now().replace(小时=0,分钟=0,秒=0,微秒=0))
In[28]:df
出[28]:
日期x日期\u今天\u最大值
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
函数,但它只接受字符串作为参数。我想您只需要一个带有窗口函数的case
表达式:
select date, x,
(case when date = max(date) over ()
then current_date else date
end) as date_today_max
from t;
请用英语解释逻辑。如果你愿意,代码很方便,但是人类的思想最好用人类的语言来表达。@GordonLinoff我很乐意这样做,但是,我缺少一整套词汇来正确描述这些问题,即使是这样一个基本的问题。也许你的书能帮我改变这一点:)。感谢您的帮助,您的解决方案非常有效!