- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们工厂,我们有以下类次:
在某个表中,我们有几个日期时间条目,我想使用查询对其进行分组。对于类次 1、2 和 3,此查询工作正常::
CASE
WHEN DATEPART(hh, c.date_time_stamp) >= 5 AND DATEPART(hh, c.date_time_stamp) < 13 THEN CONVERT(VARCHAR(10), c.date_time_stamp, 103) + ' shift 1'
WHEN DATEPART(hh, c.date_time_stamp) >= 13 AND DATEPART(hh, c.date_time_stamp) < 21 THEN CONVERT(VARCHAR(10), c.date_time_stamp, 103) + ' shift 2'
WHEN DATEPART(hh, c.date_time_stamp) >= 21 AND DATEPART(hh, c.date_time_stamp) < 24 THEN CONVERT(VARCHAR(10), c.date_time_stamp, 103) + ' shift 3'
WHEN DATEPART(hh, c.date_time_stamp) >= 00 AND DATEPART(hh, c.date_time_stamp) < 5 THEN CONVERT(VARCHAR(10), DATEADD(DAY, -1, c.date_time_stamp), 103) + ' shift 3' END AS shift,
这给了我某种 shift_id。为了识别类次 4a 和 4b,我可以扩展 case 语句,但我有点担心查询的性能。
谁能告诉我如何创建一个以高效方式返回 shift_id 的函数?谢谢!
编辑:一些示例数据:
inventory_trans_number creation_dt shift_id shift_type container_code
---------------------- ----------------------- -------------------- ---------- ------------------
140952 2013-02-04 01:03:19.043 20130203 03 3 154143591115247892
140956 2013-02-04 01:07:20.343 20130203 03 3 154143591115247939
140962 2013-02-04 01:10:56.417 20130203 03 3 154143591115247991
140968 2013-02-04 01:14:55.250 20130203 03 3 154143591115248134
140970 2013-02-04 01:17:18.883 20130203 03 3 154143591115248196
141070 2013-02-04 02:12:59.327 20130203 03 3 154143591115248240
141076 2013-02-04 02:16:27.480 20130203 03 3 154143591115248356
141092 2013-02-04 02:22:44.067 20130203 03 3 154143591115248530
141096 2013-02-04 02:25:02.157 20130203 03 3 154143591115248585
141102 2013-02-04 02:33:51.253 20130203 03 3 154143591115248615
最佳答案
这将为您提供转变。它的工作原理是意识到这是一个数学问题,而不是数据库问题。
每周有 21 个类次,我们创建了一个表变量来保存类次名称 - 您可能想为此创建一个永久表,并在 Number 列上创建一个索引。
通过在我们感兴趣的任何日期之前设置为星期一 5:00 的时间和日期时间之间的小时获取 DATEDIFF
,并取将其与 24*7(一周中的小时数)取模,我们得到一个数字,指示周一 5:00 后的小时数(即类次 0)。将其除以 8 即可得到类次编号。
DECLARE @FirstEverShift datetime = CONVERT(datetime, '2011-12-26 05:00')
DECLARE @ShiftTypes TABLE
(Number int NOT NULL PRIMARY KEY,
Shift nvarchar(2) NOT NULL)
INSERT @ShiftTypes
VALUES
(0, '1'),
(1, '2'),
(2, '3'),
(3, '1'),
(4, '2'),
(5, '3'),
(6, '1'),
(7, '2'),
(8, '3'),
(9, '1'),
(10, '2'),
(11, '3'),
(12, '1'),
(13, '2'),
(14, '3'),
(15, '4a'),
(16, 'NA'),
(17, 'NA'),
(18, '4b'),
(19, 'NA'),
(20, 'NA')
SELECT s.date_time_stamp
,st.Shift
FROM shifts s
INNER JOIN
@ShiftTypes st ON st.Number=DATEDIFF(HOUR, @FirstEverShift, s.date_time_stamp) % (24*7) / 8
编辑
我意识到周末轮类是 12 小时而不是 8 小时。这种方法有效但需要修改,我不会这样做,因为我在平板电脑上!
不是除以 8,而是除以 4,这意味着表变量必须从 0 到 40,每 8 小时轮类需要 2 个数字,每 12 小时需要 3 个数字。
关于sql - 按类次分组时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14682849/
您好,我正在处理 BIRT 报告。我有一个查询,我必须对父级的重复数据进行分组,但子级也不能分组! 在我的查询中: item 是父项,item_ledger_entry 是子项。我有来自 item.N
我正在使用 GA API。 这是针对 MCF 目标报告(底部)的标准目标完成指标表(顶部) 看一下这个: 总数加起来 (12,238),但看看按 channel 分组的分割有多么不同!我以为这些会很接
我正在开发一个流量计数器,我想获得 IP 和重复计数,但是如何? 就像是 :select ip, count(ip) from Redirect 返回 : null total ip count 重定
我尝试编写一个正则表达式来匹配条件表达式,例如: a!=2 1+2=2+a 我尝试提取运算符。我当前的正则表达式是“.+([!=<>]+).+” 但问题是匹配器总是尝试匹配组中可能的最短字符串
在 MS Transact SQL 中,假设我有一个这样的表(订单): Order Date Order Total Customer # 09/30/2008 8
我想按 m.ID 分组,并对每个 m.id 求和 (pm.amount_construction* prod.anzahl) 实际上我有以下结果: Meterial_id | amount_const
我想根据多列中的值对值进行分组。这是一个例子: 我想得到输出: {{-30,-50,20},{-20,30,60},{-30,NULL or other value, 20}} 我设法到达: SELE
我正在尝试找出运行此查询的最佳方式。我基本上需要返回在我们的系统中只下了一个订单的客户的“登录”字段列表(登录字段基本上是客户 ID/ key )。 我们系统的一些背景...... 客户在同一日期下的
给定以下mysql结果集: id code name importance '1234', 'ID-CS-B', 'Chocolate Sauce'
大家好,我的数据框中有以下列: LC_REF 1 DT 16 2C 2 DT 16 2C 3 DT 16 2C 1 DT 16 3C 6 DT 16 3C 3
我有这样的 mongoDB 集合 { "_id" : "EkKTRrpH4FY9AuRLj", "stage" : 10, }, { "_id" : "EkKTRrpH4FY9
假设我有一组数据对,其中 index 0 是值,index 1 是类型: input = [ ('11013331', 'KAT'), ('9085267',
java中用stream进行去重,排序,分组 一、distinct 1. 八大基本数据类型 List collect = ListUtil.of(1, 2, 3, 1, 2).stream().fil
基本上,我从 TABLE_A 中的这个开始 France - 100 France - 200 France - 300 Mexico - 50 Mexico - 50 Mexico - 56 Pol
我希望这个正则表达式 ([A-Z]+)$ 将选择此示例中的最后一次出现: AB.012.00.022ABC-1 AB.013.00.022AB-1 AB.014.00.022ABAB-1 但我没有匹配
我创建了一个数据透视表,但数据没有组合在一起。 任何人都可以帮助我获得所需的格式吗? 我为获取数据透视表而编写的查询: DECLARE @cols AS NVARCHAR(MAX), -- f
我想按时间段(月,周,日,小时,...)选择计数和分组。例如,我想选择行数并将它们按 24 小时分组。 我的表创建如下。日期是时间戳。 CREATE TABLE MSG ( MSG_ID dec
在 SQL Server 2005 中,我有一个包含如下数据的表: WTN------------Date 555-111-1212 2009-01-01 555-111-1212 2009-
题 假设我有 k 个标量列,如果它们沿着每列彼此在一定距离内,我想对它们进行分组。 假设简单 k 是 2 并且它们是我唯一的列。 pd.DataFrame(list(zip(sorted(choice
问题 在以下数据框中 df : import random import pandas as pd random.seed(999) sz = 50 qty = {'one': 1, 'two': 2
我是一名优秀的程序员,十分优秀!