我有一张桌子,上面有名字,negeri以及开始服务和结束服务的年份。我想获得一个人在某州服务的年限:
ID | Name | State | yearstart | yearend
-----------------------------------------------------------
1 | Tom | Kedah | 2001 | 2002
1 | Tom | Kedah | 2003 | 2007
2 | Anne | Melaka | 2008 | 2012
2 | Anne | Melaka | 2013 | 2018
3 | Bill | KL | 2000 | 2001
我已经尝试过了。但是它只计算年数并列出所有人(姓名和州名重复)。
$query = DB::table('itemregistrations')
->join('state', 'itemregistrations.StateID', '=', 'state.StateID')
->select('itemregistrations.name');
if($request->input('negeri_perkhidmatan') != '') {
$query->join('itemregistrationpangkat', 'itemregistrationpangkat.itemRegistrationID', '=', 'itemregistrations.itemRegistrationID')
->where('itemregistrationpangkat.StateID', $request->input('negeri_perkhidmatan'));
}
if(request('tempoh_negeri')) {
$query->whereRaw('yearend - yearstart >= ?', [request('tempoh_negeri')]);
}
结果显示:
ID | Name | State | years
---------------------------------------
1 | Tom | Kedah | 1
1 | Tom | Kedah | 4
2 | Anne | Melaka | 4
2 | Anne | Melaka | 5
3 | Bill | KL | 1
结果应为:
ID | Name | State | years
---------------------------------------
1 | Tom | Kedah | 5
2 | Anne | Melaka | 9
3 | Bill | KL | 1
使用ajax获取浏览器中显示的结果。我没有把它放在这里。
答案 0 :(得分:1)
这将起作用:
select m.id,m.name,sum(m.duration) from (select ID,Name,yearend-yearstart
as duration from Table1)m group by m.id,m.name;
答案 1 :(得分:0)
试试看!
从表组中按ID选择ID,名称,状态,总和(年)
答案 2 :(得分:0)
在years
列上尝试SUM(),然后在ID
,Name
和State
上按GROUP BY。
这将汇总您要避免的“重复”行。
答案 3 :(得分:0)
您必须使用Group By ID和这样的年差总和,由于表的数量过多,我没有运行此代码,但是您可以轻松理解。
$query = DB::table('itemregistrations')
->join('state', 'itemregistrations.StateID', '=', 'state.StateID');
if($request->input('negeri_perkhidmatan') != '') {
$query = $query->join('itemregistrationpangkat', 'itemregistrationpangkat.itemRegistrationID', '=', 'itemregistrations.itemRegistrationID')
->where('itemregistrationpangkat.StateID', $request->input('negeri_perkhidmatan'));
}
if(request('tempoh_negeri')) {
$query = $query->whereRaw('yearend - yearstart >= ?', [request('tempoh_negeri')]);
}
$results = $query->select(DB::raw('itemregistrations.ID, itemregistrations.name, SUM(yearend - yearstart) as years'))
->groupBy('itemregistrations.ID')
->get();
答案 4 :(得分:0)
select name, state (max(yearend) - min(yearstart)) as years from state group by name;
+------+--------+------+
| name | state | years |
+------+--------+------+
| Anne | Melaka | 10 |
| Bill | KL | 1 |
| Tom | Kedah | 6 |
+------+--------+------+
答案 5 :(得分:0)
通过m.userid,m.state,m.name从mytable m组中选择m.userid,m.name,m.state,SUM(m.yearend-m.yearstart)作为持续时间;
我认为这应该可以解决您的问题。