【问题标题】:sql join query date formatsql join 查询日期格式
【发布时间】:2021-11-15 14:44:06
【问题描述】:

我正在尝试为我的交易利润制作漂亮的表格视图(在 grafana 中),并按日期对我的交易进行分组。

SELECT
close_date AS "Date",
(SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND c2.close_date = close_date) AS Wins,
(SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND c2.close_date = close_date) AS Losses,
(SELECT AVG(close_profit * 100) FROM trades WHERE c2.close_date = close_date) AS "Avg",
(SELECT SUM(close_profit_abs) FROM trades WHERE c2.close_date = close_date) AS "Profit"
FROM trades c2 WHERE close_date IS NOT NULL GROUP BY close_date

这将创建交易的表格列表,但它不会按日期对交易进行分组,因为原始“close_date”的形式是“2021-09-20 11:11:12.954078 +0000 UTC”。

如何格式化 close_date 以便只有日期 (2021-09-20) 并在连接查询中使用它? 我试过这个:

SELECT
date(close_date) AS "Date",
.....

这会根据我的需要将 close_date 更改为日期,但随后分组将不起作用。

我尝试将每个 close_date 更改为 date(close_date),但随后整个语法中断。

SELECT
date(close_date) AS "Date",
(SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND c2.date(close_date) = date(close_date)) AS Wins,
(SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND c2.date(close_date) = date(close_date)) AS Losses,
(SELECT AVG(close_profit * 100) FROM trades WHERE c2.date(close_date) = date(close_date)) AS "Avg",
(SELECT SUM(close_profit_abs) FROM trades WHERE c2.date(close_date) = date(close_date)) AS "Profit"
FROM trades c2 WHERE date(close_date) IS NOT NULL GROUP BY date(close_date)

问题是:

c2.date(close_date)

如何在此处格式化日期时间?

c2.close_date (2021-09-20 11:11:12.954078 +0000 UTC) -> c2.date(close_date) (2021-09-20) ??

感谢您的帮助。我无论如何都不是 sql 专家,所以我的术语可能“有点偏离”。

【问题讨论】:

    标签: sql join grafana


    【解决方案1】:

    您可以使用 CAST()CONVERT() 函数

    转换您的日期

    阅读更多关于这个功能CONVERT() & CAST()

    SELECT CONVERT(varchar(10),'2021-09-20 11:11:12.954078 +0000 UTC',105) AS [Date]
    

    【讨论】:

    • 感谢 Ravi 的回答,但在这种情况下,以我的技能,我无法以任何方式使用您的建议。
    • @user3647376 你能把你的表格提供给我吗?
    • 当然。这是pastebin链接pastebin.com/c621VFR7
    • 感谢提供数据。给我几分钟,我很快就会回复你@user3647376
    【解决方案2】:

    请参考此代码

    SELECT
                CONVERT(varchar(10),close_date,105) AS "Date",
                (SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS Wins,
                (SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS Losses,
                (SELECT AVG(close_profit * 100) FROM trades WHERE CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS "Avg",
                (SELECT SUM(close_profit_abs) FROM trades WHERE CONVERT(varchar(10),c2.close_date,105) = CONVERT(varchar(10),close_date,105)) AS "Profit"
    FROM trades c2 
    WHERE CONVERT(varchar(10),close_date,105) IS NOT NULL 
    GROUP BY CONVERT(varchar(10),close_date,105)
    

    【讨论】:

    • 谢谢你。现在问题出在 varchar 和 grafana 上。 “没有这样的功能:varchar”。我必须弄清楚一些事情..当然也欢迎其他解决方案;)
    • @user3647376 使用“varying(10)”数据类型而不是“varchar(10)”。
    • 再次感谢您,但这也不适用于 grafana。 :(
    • date(close_date) 完美运行,但唯一的问题是在这里使用它时:SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND c2.date(close_date) = date(close_date)) AS赢了,
    【解决方案3】:

    我能够让它工作。

    SELECT
    date(close_date) AS "Date",
    (SELECT COUNT(*) FROM trades WHERE close_profit > 0 AND date(c2.close_date) = date(close_date)) AS Wins,
    (SELECT COUNT(*) FROM trades WHERE close_profit < 0 AND date(c2.close_date) = date(close_date)) AS Losses,
    (SELECT AVG(close_profit * 100) FROM trades WHERE date(c2.close_date) = date(close_date)) AS "Avg",
    (SELECT SUM(close_profit_abs) FROM trades WHERE date(c2.close_date) = date(close_date)) AS "Profit"
    FROM trades c2 WHERE date(close_date) IS NOT NULL GROUP BY date(close_date)
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-06-30
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多