我正在尝试为每个孩子创建
uniqueid
列(因为它们在表中出现多次),以便我可以识别具有相同名称的孩子(没有孩子具有相同的 dadname
、mumname
和 childdob
)
)
q)group select dadname, mumname, childdob from peopletb
dadname mumname childdob |
----------------------------------------------| -----------------
simon jessica 2007.03.27| 0 1658 2292 18295
mike rachel 2007.02.06| 1 4293 10976 33439 53751 63077 81844 90244 98782 ..
james lucy 2005.04.09| 2 12756 21354
francis anne 2007.04.12| 3 4151 8252 159075 172735 175531 177199 206953 40..
francis anne 2007.04.13| 7 3255 7292 128021 143595 157839 168120 186578 21..
mike rachel 2007.02.05| 10 4292 10946 33339 56751 67077 82844 96244 99381 ..
等等
问题是,
childdob
存在一些细微的差异,它增加了一天,或者相反,它回退了一天。
当对数据进行分组时,我希望它能够相互分组
childdob
+1 或 -1,以便消除差异。
例如
mike rachel 2007.02.05| 10 4292 10946 33339 56751 67077 82844 96244 99381 ..
&
mike rachel 2007.02.06| 1 4293 10976 33439 53751 63077 81844 90244 98782 ..
将具有相同的 uniqueid
如愿
francis anne 2007.04.12| 3 4151 8252 159075 172735 175531 177199 206953 40..
&
francis anne 2007.04.13| 7 3255 7292 128021 143595 157839 168120 186578 21..
当您不知道真正的 dob 时,并且如果您在上方和下方都有数据点,则会出现一些棘手的边缘情况,但类似这样的事情可能是一个起点:
peopletb:([]dadname:100?`simon`mike`james;mumname:100?`jessica`rachel`lucy;childdob:100?2007.01.03 2007.01.02 2007.01.04 2007.06.01 2007.08.10 2007.08.09 2007.10.23 2007.10.24)
/default grouping
q)select idx:i by dadname,mumname,childdob from `childdob xasc peopletb
dadname mumname childdob | idx
--------------------------| --------------
james jessica 2007.01.02| ,9
james jessica 2007.01.04| ,26
james jessica 2007.08.09| 56 58 59
james jessica 2007.08.10| 75 77
james jessica 2007.10.24| ,96
james lucy 2007.01.02| ,3
james lucy 2007.01.03| 13 21 24
...
/step 1 - fudge the date
q)fudge:update childdob:{(y;x)2>y-x}\[childdob]by dadname,mumname from `childdob xasc peopletb;
/step 2 - group the fudged dates
q)select idx:i by dadname,mumname,childdob from fudge
dadname mumname childdob | idx
--------------------------| --------------------------
james jessica 2007.01.02| ,9
james jessica 2007.01.04| ,26
james jessica 2007.08.09| 56 58 59 75 77
james jessica 2007.10.24| ,96
james lucy 2007.01.02| 3 13 21 24
james lucy 2007.01.04| ,34
james lucy 2007.08.09| 50 51 55 60 65 66 70 76 78
...
注意 james/jessica 如何将 2007.08.09/10 合并为 09,但没有合并 2007.01.02/04(不明确)