我有一个相当简单的查询;它看起来像这样:
SELECT
order_date,
pickup_date,
DATE_DIFF(pickup_date,order_date, day) order_to_pickup
FROM
`orders.table`
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,我需要计算工作日的日期差异,而不是所有日期。
因此,上面的查询返回的不是:
+------------+-------------+-----------------+
| order_date | pickup_date | order_to_pickup |
+------------+-------------+-----------------+
| 3/29/19 | 4/3/19 | 5 |
| 3/29/19 | 4/2/19 | 4 |
+------------+-------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
我希望它返回:
+------------+-------------+-----------------+
| order_date | pickup_date | order_to_pickup |
+------------+-------------+-----------------+
| 3/29/19 | 4/3/19 | 2 |
| 3/29/19 | 4/2/19 | 3 |
+------------+-------------+-----------------+
Run Code Online (Sandbox Code Playgroud) Looking to do the SQL equivalent of datediff in R?
基本上,我想在 R 中进行这个计算
Delivery Date Expected Date Difference
2022-01-05 2022-01-07 -2
Run Code Online (Sandbox Code Playgroud) 当我需要仅计算08:00:00-16:00:00之间的时间时,计算从MySQL获取的两个日期时间值之间的时间的最佳方法是什么.
例如,如果我有值2008-10-13 18:00:00和2008-10-14 10:00:00,则时差应为02:00:00.
我可以用SQL做什么或者最好的方法是什么?我正在建立一个网站并使用PHP.
谢谢您的回答.
编辑:确切的是,我正在尝试计算"票"在工作时间内处于特定状态的时间.时间可能是几个星期.
EDIT2:我没有计算实际时差的问题,但减去了关闭时间,每天00:00:00-08:00:00和16:00:00-00:00:00.
-Samuli
我正在尝试优化一些非常复杂的SQL查询,因为它需要很长时间才能完成.
在我的查询中,我动态创建了具有许多相同函数的SQL语句,因此我创建了一个临时表,其中每个函数只调用一次而不是多次 - 这将我的执行时间缩短了3/4.
所以我的问题是,如果1000个日期计算的范围缩小到100,我可以期待看到很多不同吗?
编辑:查询如下所示:
SELECT DISTINCT M.MID, M.RE FROM #TEMP INNER JOIN M ON #TEMP.MID=M.MID
WHERE ( #TEMP.Property1=1 ) AND
DATEDIFF( year, M.DOB, @date2 ) >= 15 AND DATEDIFF( year, M.DOB, @date2 ) <= 17
Run Code Online (Sandbox Code Playgroud)
其中这些是作为字符串动态生成的(按位组合在一起)然后执行,以便可以在每次迭代时更改各种参数 - 主要是最后一行,包含各种DATEDIFF查询.
像这样的大约420个查询,这些日期计算是这样计算的.我知道我可以轻松地将它们全部放入临时表(1000个日期变为50) - 但它是否值得,它会在几秒钟内产生任何差异吗?我希望能比十分之一秒更好地改进.
我想获得两个Java Date对象之间的区别.我用过Joda-Time库.但问题是我得到的天差异大于实际天差.
这是我的代码片段:
DateFormat formatter = new SimpleDateFormat("mm/dd/yyyy");
Date someDate=new Date();
Date today = Calendar.getInstance().getTime();
try {
someDate = formatter.parse("06/22/2010");
}
catch(ParseException pe) {
System.out.println("Parser Exception");
}
int days = Days.daysBetween(new DateTime(someDate), new DateTime(today)).getDays();
System.out.println(" Days Between " + someDate + " : " + today + " - " + days);
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
Days Between Fri Jan 22 00:06:00 IST 2010 : Sun Jul 25 19:27:01 IST 2010 - 184
Run Code Online (Sandbox Code Playgroud)
在这里,为什么需要"06/22/2010"作为1月22日?有没有人面临类似的问题?
帮帮我的朋友.. Thanx提前..
这是示例代码
$c = new DateTime();
$o = clone $c;
$o->modify('-60 days');
$diff = $c->diff($o);
$diff2 = $c->diff($o, TRUE);
var_dump($diff, $diff2);
Run Code Online (Sandbox Code Playgroud)
哪个输出
object(DateInterval)#3 (8) {
["y"]=> int(0), ["m"]=> int(1), ["d"]=> int(29), ["h"]=> int(0), ["i"]=> int(0),
["s"]=> int(0), ["invert"]=> int(1), ["days"]=> int(60)
}
object(DateInterval)#4 (8) {
["y"]=> int(0), ["m"]=> int(1), ["d"]=> int(29), ["h"]=> int(0), ["i"]=> int(0),
["s"]=> int(0), ["invert"]=> int(0), ["days"]=> int(60)
}
Run Code Online (Sandbox Code Playgroud)
正如我所看到的,只有"反转"属性发生了变化.这是什么意思?
再次拉出我的头发......
我需要计算两个日期之间的差异.我这样做:
<cfset d = DateDiff("d", Dateformat( active_apps.app_base_coupon_start, "dd.mm.yyyy"), Dateformat( variables.useDate, "dd.mm.yyyy") )>
Run Code Online (Sandbox Code Playgroud)
使用active_apps.app_base_coupon_start= 27.07.2012和variables.useDate= today = 02.10.2012.
我抛弃了两个值,他们没关系.然而,当我寻找的dateDiff回报-168(7月4天,8月31日,9月30日,10月2日)67天.
问:
有人可以阻止我失去了我剩余的头发,告诉我我在做什么错在这里或者,如果有一个更简单的方式来获得在天有什么区别?
编辑:
好的,它也是这样的:
<cfif DateAdd("d", active_apps.app_grace_time, Dateformat( active_apps.app_base_coupon_start, "dd.mm.yyyy") ) GT now()>
<cfdump output="e:\s\page\t\dump.txt" label="catch" var="YUP">
<cfelse>
<cfdump output="e:\s\page\t\dump.txt" label="catch" var="NOPE">
</cfif>
Run Code Online (Sandbox Code Playgroud)
但我还是想知道,为什么dateDiff要回归奇怪的价值观.
我有一个名为Event的表,其中eventNum作为主键,日期作为SQL Server 2008 R2中的datetime2(7).我试图获取表中最后两行的日期,并在几分钟内得到差异.这就是我目前拥有的:
Select DATEDIFF(MI, e.date,(Select e2.date from Event e2 where eventNum = (Select MAX(e2.eventNum))))
From Event e
Where eventNum = (Select MAX(e.eventNum)-1 from e)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
列名无效'从事件中选择eventNum,其中eventNum =从Event'中选择MAX(eventNum).
我已经改变了100次,无法让它发挥作用.有帮助吗?
我有两个日期时间字段,我需要显示它们之间的区别.我用这个表达式来计算它:
=DateDiff("n", Fields!hra_atncion.Value, Fields!fcha_incio.Value)
Run Code Online (Sandbox Code Playgroud)
结果列应为HH:mm,但结果为Long表达式类型.像428011156这样的东西
任何答案都会被贬低!
更新2013年11月21日
我如何获得12-11-2013 20:00和14-11-2013 08:00之间的分钟时差?
我有一个包含销售数据和用户ID的交易数据库,如下所示:
id_usuarioweb dt_fechaventa
1551415 2015-08-01 14:57:21.737
1551415 2015-08-06 15:34:21.920
6958538 2015-07-30 09:26:24.427
6958538 2015-08-05 09:30:06.247
6958538 2015-08-31 17:39:02.027
39101175 2015-08-05 16:34:17.990
39101175 2015-09-20 20:37:26.043
1551415 2015-09-05 13:41:43.767
3673384 2015-09-06 13:34:23.440
Run Code Online (Sandbox Code Playgroud)
我想计算数据库中同一客户的日期之间的平均差异(找出用户购买的平均频率).
我知道我可以使用两列进行约会,但是我在尝试在同一个字段中执行此操作并按用户ID"分组"时遇到问题.
期望的结果是这样的:
id_usuarioweb avgtime_days
1551415 5
6958538 25
39101175 25
1551415 0
3673384 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我将按user_id和dt_fechaventa(销售时间)排序数据库.
使用:SQL Server 2008