我的查询存在问题,我无法弄清楚如何执行。
让我简化表结构;
|-------------|--------|
| node_id | id |
| 2610 | 1643 |
| 2610 | 1644 |
| 2610 | 1645 |
| 2610 | 1646 |
| 2611 | 1647 |
| 2611 | 1648 |
等等
我需要通过node_id查询第一个和最后一个记录分组,按id排序 结果必须是:
| 2610 | 1643 | 1645 |
| 2611 | 1647 | 1648 |
答案 0 :(得分:3)
SELECT node_id, MIN(id), MAX(id)
FROM mytable
GROUP BY
node_id
答案 1 :(得分:2)
您可以使用以下查询:
<?php
$data_provider = $model->viewEmployees($search, $from, $to);
$data_provider->pagination = false;
$this->widget('ext.pdfGrid.EPDFGrid', array(
'id' => 'employee-pdf',
'fileName' => 'Employees',
'dataProvider' => $model->viewEmployees($search, $from, $to),
'columns' => array(
array('name' => 'ID Number','value' => '$data->company_id', 'htmlOptions'=>array('width'=>'10%'),),
array('name' => 'Name', 'header' => 'Name', 'value' => '$data->getNameWithMiddleInitial()', 'htmlOptions' => array('width'=>'10%')),
array('name' => 'Date Employed', 'value' => '$data->date_employed' ,'htmlOptions'=>array('width'=>'10%')),
),
'config' => array(
'title' => 'Sprasia Philippines Information Management System',
'subTitle' => 'List of Employees',
'headerDetails' => true,
'showLogo' => true,
'colAligns' => array('C', 'C', 'C'),
),
));
?>
它将返回两个记录。第一行具有最低id,第二行具有最高id。
答案 2 :(得分:1)
我已经实现了Quassnoi答案并且itr有效,但是如果我复杂一点查询结构我没有得到所需的结果
我会尝试解释: 想象一下,在表格中添加一些字段,其中每一行代表一个时间间隔
| ------------- | -------- | ------------ | ---------- | ---------- |
| node_id | id |一天| ifrom | ito |
| 2610 | 1643 | 2013-01-23 | 08:00:00 | 10:00:00 |
| 2610 | 1644 | 2013-01-23 | 10:00:00 | 12:30:00 |
| 2610 | 1645 | 2013-01-24 | 08:00:00 | 12:30:00 |
| 2610 | 1646 | 2013-01-24 | 13:30:00 | 15:00:00 |
| 2611 | 1647 | 2013-01-28 | 08:00:00 | 09:30:00 |
| 2611 | 1648 | 2013-01-29 | 11:00:00 | 12:00:00 |
我需要获得每组的最小开始和最大结束;类似于以下内容
| ------------- | --------------------- | ---------- ----------- |
| node_id |开始|结束|
| 2610 | 2013-01-23 08:00:00 | 2013-01-24 15:00:00 |
| 2611 | 2013-01-28 08:00:00 | 2013-01-29 09:30:00 |
有没有办法获得它?我尝试了这个查询,但最终失败了
SELECT node_id, MIN( UNIX_TIMESTAMP( CONCAT(
DAY , ' ', ifrom ) ) ) AS ifrom, MAX( UNIX_TIMESTAMP( CONCAT(
DAY , ' ', ito ) ) ) AS ito
FROM table
GROUP BY node_id
ORDER BY ifrom
它有效,但由于我需要直接在查询中获取日期+时间的文本表示,我试过了
SELECT node_id, MIN( UNIX_TIMESTAMP( CONCAT(
DAY , ' ', ifrom ) ) ) AS ifrom, MAX( UNIX_TIMESTAMP( CONCAT(
DAY , ' ', ito ) ) ) AS ito, FROM_UNIXTIME( MIN( UNIX_TIMESTAMP( CONCAT(
DAY , ' ', ifrom ) ) ) , '%d-%m-%Y %H:%i' ) AS itxtfrom, FROM_UNIXTIME( MIN( UNIX_TIMESTAMP( CONCAT(
DAY , ' ', ito ) ) ) , '%d-%m-%Y %H:%i' ) AS itxtto
FROM table
GROUP BY node_id
ORDER BY ifrom
但在这种情况下,它无法获得间隔的结束
有人有想法吗? 问候