我有一张桌子,我想将其作为如下所述的邀请排行榜。我想创建一个查询来计算给定月份中重复行的数量并以降序排列。
通读一些问题,这个查询似乎有效:
SELECT COUNT(invite_code) AS counted
FROM invite_table
GROUP BY invite_code
ORDER BY counted DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
但它不考虑月份。我正在寻找的是获得最常出现的user_code在指定月份的地方。此外,对表设计的任何批评都是受欢迎的,因为我故意设计它以便有具有重复值的重复行。我正在尝试跟踪在给定月份中使用最多邀请码的用户,我还有一些代码指示用户来自哪个频道(例如,可能在 FB 中看到广告),这是一个有效的表格设计吗?
表“public.invite_table”
专栏 | 类型 | 整理 | 可空 | 默认
-------------+--------------+-----------+- ---------+---------
用户代码 | 性格变化| | 不为空|
邀请码 | 性格变化| | |
月 | 字符变化(3) | | 不为空|
点 | 整数 | | 不为空|
索引:
"invite_table_pkey" PRIMARY KEY, btree (user_code)
外键约束:
“invite_table_user_code_fkey”外键(用户代码)参考用户表(用户代码)
什么是 SQL Server 功能,它允许您将当前日期作为DATE类似于 SQL 标准CURRENT_DATE功能的类型获取。什么是<current date value function>SQL Server的?
使用 PostgreSQL,我正在寻找类似的东西,
SELECT CURRENT_DATE;
current_date
--------------
2018-06-27
(1 row)
Run Code Online (Sandbox Code Playgroud) 在其中一个存储过程中,我需要捕获实时事件的持续时间。保证永远不会超过 24 小时,因此结果列的数据类型选择为TIME(3)(映射到TimeSpan应用程序端)。计算过程如下:
update tbEvent set tWait= @dtEvent - dEvent - tEvent [where idEvent = @idEvent]
Run Code Online (Sandbox Code Playgroud)
此处dEvent和tEvent先前设置为dtEvent(原始事件@dtEvent的时刻)的日期和时间部分,并且是后续关闭事件的时刻。因此,我从 DATETIME 变量中减去 DATE 和 TIME 列值,并将结果填充到 TIME 列中。
[合理吗?] 预期行为: SQL 将每个表达式项隐式转换为 DATETIME,执行减法,然后通过简单地删除 DATE 部分将结果隐式转换为 TIME。 这一直有效! 嗯, - 到目前为止..
一个更新脚本突然在 SQL 2016 (13.0.1742.0) 上产生了一个错误:
System.Data.SqlClient.SqlException (0x80131904):
The data types datetime and date are incompatible in the subtract operator.
Error Number:402,State:1,Class:16
Run Code Online (Sandbox Code Playgroud)
但是相同的脚本在 2008 R2 (10.50.2500.0) 和 2019 (15.0.2080.9) 上运行良好! …
这与我的问题有关如何在 SQL 服务器中找到上个月的第 XX 天?
会计月从每个月的 26 日开始。
我需要从任何日期找出:
例如:
CurrentDate - '2014-04-26'
Start_Of_Fiscal_Month = 2014-04-26
Day_Of_Fiscal_Month = 1
Run Code Online (Sandbox Code Playgroud)
CurrentDate - '2014-05-02'
Start_Of_Month = 2014-04-26
Day_Of_Fiscal_Month = 7
Run Code Online (Sandbox Code Playgroud) 我有一些数据很难建模。特别是,我不确定如何确保我拥有唯一的数据。这是我将团队分配到商店的时间表。一个团队将连续两天被安排在同一家商店,但我必须确保在给定的时间段(或“周期”)内安排他们不超过 2 天。
数据的电子表格表示如下所示。
Run Code Online (Sandbox Code Playgroud)Cycle Team Store Date 1 1 1 1-Dec 1 1 1 2-Dec 1 1 2 3-Dec 1 1 2 4-Dec 1 1 3 8-Dec 1 1 3 9-Dec 1 1 4 10-Dec 1 1 4 11-Dec 1 2 10 1-Dec 1 2 10 2-Dec 1 2 11 3-Dec 1 2 11 4-Dec 1 2 12 8-Dec 1 2 12 9-Dec 1 2 13 10-Dec 1 2 13 11-Dec
我已经有了一个运行良好的团队/商店交叉引用,但达到这种粒度级别是新的。如果我可以在 Team/Store/Date 上放置一个复合主键会很容易,但我显然不能这样做,或者我只能存储两个预定日期中的一个。
迄今为止,我已经考虑使用具有一对多关系的日期表,从 Team/Store 到现在,但这似乎并没有解决唯一性问题,并增加了一些愚蠢的开销。
有没有人对如何建模有任何建议?
该标签似乎不合适,因为这确实是我问的一个抽象设计问题,但我使用的是 …
有没有办法在 SQL 中计算上个月(和去年)的今天(和昨天)?
假设今天是 26-May-2015 那么如何找到?
我正在尝试DATE使用以下语句获取对象:
TO_DATE('1970-01-01 00:00:00 UTC','YYYY-MM-DD HH24:MI:SS TZR')
Run Code Online (Sandbox Code Playgroud)
和
TO_DATE('1970-01-01 00:00:00 UTC','YYYY-MM-DD TZH:TZM:SS TZR')
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下,它都告诉我:ORA-01821: date format not recognized.
我TZR从https://www.techonthenet.com/oracle/functions/to_date.php得到了格式说明符,即:
TZD 夏令时信息。例如,“太平洋标准时间” TZH 时区小时。 TZM 时区分钟。 TZR 时区区域。
用时区指定日期/时间的正确方法是什么?
我有一个每日附加表,我需要一个公式来将表结果过滤到任何给定历史月份的最后一天。例如:
桌子:
DwDate Balance
20181231 $10
20190131 $80
20190228 $75
20190331 $50
Run Code Online (Sandbox Code Playgroud)
99% 的时间我只需要MAX(DwDate),这将是:
@MaxDate = (SELECT MAX(DwDate) FROM dbo.TABLE)
Run Code Online (Sandbox Code Playgroud)
但是,有时我需要一个可以让我回到 1 或 2 个月的公式:
@MaxDate - 2 Months
Run Code Online (Sandbox Code Playgroud) 我的表中有带有时区的时间戳(timestamptz)。我可以将它们转换为 unix 时间戳格式的数字或 int 吗?
我发现了这个问题,但它只显示了如何将没有时区的时间戳转换为unix时间戳。
我正在使用 SQL Server,我有两个表,table1并且table2. 两个表都有一个DATETIME表示为 的列dt。我不仅需要根据某些条件连接这些表,还要确保匹配的行具有相同的日期(此处不考虑时间)dt。
这是我当前使用的查询:
select *
From table1 a inner join table2 b
on a.id = b.a_id
and convert(date, a.dt) = convert(date, b.dt)
Run Code Online (Sandbox Code Playgroud)
该查询可以获取我需要的结果,但我担心它的性能,尤其是当表大小增加时。
我想知道是否有更高效的方法可以达到相同的结果?是否有技术或 SQL Server 功能可以帮助我优化此查询,尤其是日期比较部分?
任何意见或建议将不胜感激。先感谢您。
date ×10
sql-server ×6
datetime ×4
postgresql ×2
t-sql ×2
aggregate ×1
date-format ×1
date-math ×1
join ×1
oracle ×1