在全球历史气候网络已其收藏的天气测量的标记无效或错误的数据.删除这些元素后,有大量数据不再具有连续的日期部分.数据类似于:
"2007-12-01";14 -- Start of December
"2007-12-29";8
"2007-12-30";11
"2007-12-31";7
"2008-01-01";8 -- Start of January
"2008-01-02";12
"2008-01-29";0
"2008-01-31";7
"2008-02-01";4 -- Start of February
... entire month is complete ...
"2008-02-29";12
"2008-03-01";14 -- Start of March
"2008-03-02";17
"2008-03-05";17
Run Code Online (Sandbox Code Playgroud)
虽然可以推断缺失的数据(例如,通过平均其他年份)来提供连续的范围,但为了简化系统,我想根据是否有一个连续的日期范围填写月份来标记非连续的段:
D;"2007-12-01";14 -- Start of December
D;"2007-12-29";8
D;"2007-12-30";11
D;"2007-12-31";7
D;"2008-01-01";8 -- Start of January
D;"2008-01-02";12
D;"2008-01-29";0
D;"2008-01-31";7
"2008-02-01";4 -- Start of February
... entire month is complete ...
"2008-02-29";12
D;"2008-03-01";14 -- Start of March
D;"2008-03-02";17
D;"2008-03-05";17
Run Code Online (Sandbox Code Playgroud)
一些测量是在1843年进行的.
对于所有气象站,您如何标记缺少一天或多天的所有日期?
Java和Oracle都有一个名为Date 的时间戳类型.开发人员倾向于操纵这些,就好像它们是日历日期一样,我看到它会导致令人讨厌的一次性错误.
对于基本日期数量,您可以在输入时简单地切断时间部分,即降低精度.但如果您使用日期范围(例如:9/29-9/30),则这两个值之间的差异是1天,而不是2.此外,范围比较需要1)截断操作:start < trunc(now) <= end
或者2)算术:start < now < (end + 24hrs)
.不可怕,但不是干.
另一种方法是使用真正的时间戳:9/29 00:00:00 - 10/1 00:00:00.(午夜到午夜,因此不包括10月的任何部分).现在持续时间本质上是正确的,范围比较更简单:start <= now < end
.对于内部处理来说当然更干净,但是在初始输入(+1)时需要转换结束日期,对于输出(-1),假定用户级别的日历日期隐喻.
你如何处理项目的日期范围?还有其他选择吗?我特别感兴趣的是如何在Java和Oracle方面处理这个问题.
你可以让我知道SQL重叠时分割日期范围吗?
数据(具有日期范围和可能的其他列的样本数据):
Col1 FromDate ToDate
1. 1 1/1/2008 31/12/2010
2. 1 1/1/2009 31/12/2012
3. 1 1/1/2009 31/12/2014
Run Code Online (Sandbox Code Playgroud)
输出:
Col1 From Date ToDate
1. 1 1/1/2008 31/12/2008 (from row 1 above)
2. 1 1/1/2009 31/12/2010 (from rows 1,2 and 3 above)
3. 1 1/1/2011 31/12/2012 (from rows 2 and 3 above)
4. 1 1/1/2013 31/12/2014 (from row 3 above)
Run Code Online (Sandbox Code Playgroud) 我有一个简化的表格如下:
create table Test
(
ValidFrom date not null,
ValidTo date not null,
check (ValidTo > ValidFrom)
)
Run Code Online (Sandbox Code Playgroud)
我想编写一个触发器来阻止插入与现有日期范围重叠的值.我写了一个如下所示的触发器:
create trigger Trigger_Test
on Test
for insert
as
begin
if exists(
select *
from Test t
join inserted i
on ((i.ValidTo >= t.ValidFrom) and (i.ValidFrom <= t.ValidTo))
)
begin
raiserror (N'Overlapping range.', 16, 1);
rollback transaction;
return
end;
end
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为我新插入的记录是两个表Test的一部分,并在触发器内插入.因此,插入表中的新记录始终在Test表中与其自身连接.触发器将始终恢复转换.
我无法区分新记录和现有记录.因此,如果我排除相同的日期范围,我将能够在表格中插入多个完全相同的范围.
是否可以编写一个可以按预期工作的触发器,而无需在Test表中添加额外的标识列,我可以使用它从我的exists()
语句中排除新插入的记录,如:
create trigger Trigger_Test
on Test
for insert
as
begin
if exists(
select …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来突出鼠标悬停时2个输入的日期范围之间的日子.
这个例子几乎可以实现我想要实现的目标:http: //hackingon.net/files/jquery_datepicker/range.htm
唯一的区别是所选范围的突出显示应该发生在两个单独的日期选择器和鼠标悬停上.
有什么建议?
更新:
好的,更多细节:
从第一个日期选择器中选择日期后,第二个日期选择器应突出显示上一个选定日期.如果您将鼠标移过上一个选定日期后的一天,则两者之间的所有日期都应通过添加类来突出显示.
更新:这是我得到了多远:
$("#input-service_date_leave, #input-service_date_return").datepicker({
rangeSelect: true,
beforeShow: customRange,
onSelect: customRange,
});
function customRange(input) {
if (input.id == "input-service_date_leave") {
$("#ui-datepicker-div td").die();
if (selectedDate != null) {
$('#input-service_date_return').datepicker('option', 'minDate', selectedDate).datepicker('refresh');
}
}
if (input.id == "input-service_date_return") {
$("#ui-datepicker-div td").live({
mouseenter: function() {
$(this).prevAll("td:not(.ui-datepicker-unselectable)").addClass("highlight");
},
mouseleave: function() {
$("#ui-datepicker-div td").removeClass("highlight");
}
});
var selectedDate = $("#input-service_date_leave").datepicker("getDate");
if (selectedDate != null) {
$('#input-service_date_return').datepicker('option', 'minDate', selectedDate).datepicker('refresh');
}
}
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/mayko/WbWg3/1/
唯一的问题是,直播事件只是突出显示当前悬停行的td,而不是之前行的td. …
我有一个表,其中一列是'YYYY-MM-DD'格式的日期.我可以使用select来获取每月范围内的所有数据吗?假设我想要从2012-01-xx到2013-04-xx的所有数据.所以我基本上是在寻找类似下面给出的SQL查询:
SELECT * FROM table WHERE date IN BETWEEN '2012-01' AND '2013-04' (INVALID QUERY)
Run Code Online (Sandbox Code Playgroud)
由于每个月都以'01'开头,我可以修改上述查询来调整开始条件.
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND '2013-04' (INVALID QUERY)
Run Code Online (Sandbox Code Playgroud)
现在问题出现了结束日期.我必须手动计算给定月份的最后日期,考虑所有因素,如月份长度,闰年等,因为如果给定日期无效,查询将失败.所以目前我正在做这样的事情:
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND 'VALID_MONTH_END_DATE' (VALID Query)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法避免这种有效的结束日期计算?
澄清
我已经想到了下个月的第一天,但即便如此,我还是要用一些逻辑来说,如果是十二月,下一个月就是明年一月.我想知道一个SQL唯一的解决方案是否可行?
我有一个包含类别,日期和费率的表格.每个类别对于不同日期可以具有不同的费率,一个类别在给定日期可以仅具有一个费率.
Id CatId Date Rate
------ ------ ------------ ---------
000001 12 2009-07-07 1
000002 12 2009-07-08 1
000003 12 2009-07-09 1
000004 12 2009-07-10 2
000005 12 2009-07-15 1
000006 12 2009-07-16 1
000007 13 2009-07-08 1
000008 13 2009-07-09 1
000009 14 2009-07-07 2
000010 14 2009-07-08 1
000010 14 2009-07-10 1
Run Code Online (Sandbox Code Playgroud)
唯一索引(catid,Date,Rate)我希望每个类别对所有连续日期范围进行分组,并仅保留范围的开头和结尾.对于前面的示例,我们将:
CatId Begin End Rate
------ ------------ ------------ ---------
12 2009-07-07 2009-07-09 1
12 2009-07-10 2009-07-10 2
12 2009-07-15 2009-07-16 1
13 2009-07-08 2009-07-09 1
14 2009-07-07 …
Run Code Online (Sandbox Code Playgroud) 我是一名非常适合MS SQL服务器的学校老师.每个人都建议尝试这个网站.开始!
我正在尝试编写查询来测试参与学术计划的不同类型的结果测量.有几种不同的方法来计算我想尝试的结果测量.我想要计算的结果是: 在六个月的课程中保留的参与者百分比是多少?我正在测试不同的方式来定义参与者和不同的时间范围.我正在尝试生成4个查询.不幸的是,我必须使用不同的表:出勤,状态,退出,非活动.我已经在下面列出了每个样本数据
参与者(分子)参与者/所有服务的学生(分母)
我正在寻找的4个查询输出是这个的不同版本:
例
Participants Served Percent_Served
75 100 75%
Run Code Online (Sandbox Code Playgroud)
我一直在乱搞下面的查询的不同版本
SELECT
Count (distinct ID) as Count,
Count ( DATEADD( dd, -181, DATEADD(wk, DATEDIFF(wk,0,Date), 0)) > 2 as Participants ,
FROM Attendance
where Attendence_date date between '07/01/2012' and '06/30/2013'
and ID not in (Select ID from Inactive)
or ID not in (select ID from Deenrolled)
GROUP BY …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的表,其中有一个带有日期类型的 user_birthday 字段(可以是 NULL 值)
CREATE TABLE users
(
user_id bigserial NOT NULL,
user_email text NOT NULL,
user_password text,
user_first_name text NOT NULL,
user_middle_name text,
user_last_name text NOT NULL,
user_birthday date,
CONSTRAINT pk_users PRIMARY KEY (user_id)
)
Run Code Online (Sandbox Code Playgroud)
该字段上定义了一个索引(btree),其规则为 NOT user_birthday IS NULL。
CREATE INDEX ix_users_birthday
ON users
USING btree
(user_birthday)
WHERE NOT user_birthday IS NULL;
Run Code Online (Sandbox Code Playgroud)
为了跟进另一个想法,我添加了扩展btree_gist
并创建了以下索引:
CREATE INDEX ix_users_birthday_gist
ON glances.users
USING gist
(user_birthday)
WHERE NOT user_birthday IS NULL;
Run Code Online (Sandbox Code Playgroud)
但它也没有影响,因为据我所知,它不用于范围检查。
PostgreSQL 版本为 9.3.4.0 (22) Postgres.app ,问题也存在于 9.3.3.0 (21) …
I'm using DateRangePicker from react-date-range in a next.js project.
You can see the expected behavior on their demo page: if you select any date from the month on the right, the months stay in place. Here's a video.
But in my project, the month from the right jumps to the left on date selection (as you can see it in this video).
I've made a simple demo here by copying code from their demo page:
import …
Run Code Online (Sandbox Code Playgroud) date-range ×10
sql ×5
postgresql ×3
date ×2
architecture ×1
b-tree-index ×1
contiguous ×1
datepicker ×1
gist-index ×1
highlighting ×1
indexing ×1
java ×1
jquery ×1
jquery-ui ×1
mysql ×1
next.js ×1
oracle ×1
reactjs ×1
select ×1
sql-server ×1
t-sql ×1
triggers ×1
types ×1