k*z 发帖数: 4704 | 1 我的DB2源表是一个逻辑表,就是已经算好了很多东西给前台用的一个逻辑表。例如时
间已经被拆分成了 Year, Month, Day,
这个源表是只增加,不更新,不删除的,我只要担心怎么插入就可以了,不用考虑更新
和删除。
现在我要把这个表每天进行一次同步,拷贝到SQL2012里面去做Report.
我目前的思路是:
先把目标表的最大日期取出来, maxdate。
Table Input:
select max(year*10000+month*100+day) as maxdate
from target_table
如果maxdate是空值,那么进行全表拷贝。(基本就是第一次更新有用,其他时候表都
有最大值的)
如果maxdate不是空值,那么把这个最大日期的天数的数据在目标表删除 (因为有可能
上次更新的时候这个最大的日期的数据还不完全)
从源表把需要更新的数据读取出来,这里有两个思路
1. 取所有大于maxdate的数据,然后更新 (有可能导入明天和后天的值)
1. 只取 maxdate 和 today()的值。 (当天的数据有可能是全的,有可能是不全的)
把这个取出来的数据插入... 阅读全帖 |
|
k*z 发帖数: 4704 | 2 【 以下文字转载自 Database 讨论区 】
发信人: kiz (泥偶), 信区: Database
标 题: [求助] 问一个Kettle从DB2抽取到SQL2012的问题
发信站: BBS 未名空间站 (Sat Nov 2 20:27:59 2013, 美东)
我的DB2源表是一个逻辑表,就是已经算好了很多东西给前台用的一个逻辑表。例如时
间已经被拆分成了 Year, Month, Day,
这个源表是只增加,不更新,不删除的,我只要担心怎么插入就可以了,不用考虑更新
和删除。
现在我要把这个表每天进行一次同步,拷贝到SQL2012里面去做Report.
我目前的思路是:
先把目标表的最大日期取出来, maxdate。
Table Input:
select max(year*10000+month*100+day) as maxdate
from target_table
如果maxdate是空值,那么进行全表拷贝。(基本就是第一次更新有用,其他时候表都
有最大值的)
如果maxdate不是空值,那么把这个最大日期的天数的数据在目标表删除 (因为有可能
上次更新的时候这个... 阅读全帖 |
|
l*****g 发帖数: 685 | 3 可不可以用下面的算法?借鉴了前面mercuriusl的思路
1)所有工人在original set setA里; create setB 用来存放已经找到one date的工人
2)create a set resultDates 用于存放找到的dates
3)用个sorted dictionary datePersonCounts统计出每天overlap
的人数
接下去就做以下循环:
4)从datePersonCounts中选择overlap人数最多的一天,maxDate,把它放进
resultDates,然后把dictionary中maxDate对应的entry删除
5) 在setB中找出maxDate那天available的工人,把他从setB删除;同时把工人的
available range中的所有dates, 从dictionary中减去:
datePersonCounts[date] -= 1;
6)在setA中找maxDate那天available的工人, 把他们从setA move to setB
(4)-(6)循环,直... 阅读全帖 |
|
y*****z 发帖数: 9 | 4 我用了 基序排序, 这样能达到线性时间。
复杂度是 max(O(M),O(N))
M是date的最大的数
N是数组的长度
code wins arguments.
欢迎拍砖
#define GREEDY_EVENT
#ifdef GREEDY_EVENT
#include
#include
#include
using namespace std;
int main(){
const int n = 5;
int sstart[n] = {1,8,2,11,15};
int eend[n] = {4,9,6,14,18};
for(int i=0;i
cout<<"("<
}
cout<
const int MAXDATE = 100;
int radix[MAXDATE]={0};
int final[n];
for(int ... 阅读全帖 |
|
y*****z 发帖数: 9 | 5 我用了 基序排序, 这样能达到线性时间。
复杂度是 max(O(M),O(N))
M是date的最大的数
N是数组的长度
code wins arguments.
欢迎拍砖
#define GREEDY_EVENT
#ifdef GREEDY_EVENT
#include
#include
#include
#include
using namespace std;
int main(){
srand(size_t(time(0)));
const int n = 5;
int sstart[n] = {1,8,2,11,15};
int eend[n] = {4,9,6,14,18};
for(int i=0;i
for(int i=0;i
for(int i=0;i
cout<<"("<阅读全帖 |
|
B*****g 发帖数: 34098 | 6 You did not mention table C before.
SELECT d.ID, d.maxdate, c.*
FROM (SELECT a.id, a.seqno, MAX (b.date) maxdate
FROM tab_a a LEFT OUTER JOIN tab_b b ON a.id = b.id
GROUP BY a.id, a.seqno) d LEFT OUTER JOIN tab_c c ON d.
seqno = c.seqno |
|
c**t 发帖数: 2744 | 7 found solution!
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
this.dateTimePicker1.MaxDate = this.dateTimePicker2.Value;
..
}
private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
{
this.dateTimePicker2.MinDate = this.dateTimePicker1.Value;
..
}
working |
|