首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加条件的连接表

附加条件的连接表
EN

Stack Overflow用户
提问于 2017-04-27 15:17:35
回答 1查看 49关注 0票数 0

我有点想不通了。我有一张桌子,里面有以下数据:

代码语言:javascript
复制
ID  | timedate     | value | ...
 1  | 04-16-2017   | 3     | ...
 1  | 04-20-2017   | 4     | ...
 1  | 04-24-2017   | 10    |...[approx 100k different IDs)

现在,用户搜索(例如) ID = 1。在我的视图中,我想显示不同的cols和值的差异。但是,区别应该仅从最后一次日期到第二次最后一次日期,如下所示:

代码语言:javascript
复制
ID  |  timedate   | value   | dif.Value
1   | 04-24-2017  |   10    |  6  [10-4]

我的实际mySQL查询如下所示:

代码语言:javascript
复制
SELECT 
 tab.Id AS `tab__Id`, 
 tab.timedate AS `tab__timedate`, 
 tab.value AS `tab__value`, 
 tab.value - t2.value AS `difValue`, 
FROM 
 tab tab
INNER JOIN tab3 t3 ON t3.Id = tab.Id 
INNER JOIN tab t2 ON t2.Id = tab.Id 
  WHERE 
  (t3.Id like '1' 
   AND tab.timedate IN (
   SELECT 
    max(tab.timedate) 
   FROM 
    tab
  GROUP BY 
    tab.Id
   )
  ) 
GROUP BY 
 tab.Id
LIMIT 
10 OFFSET 0

来自cakePHP3 =

代码语言:javascript
复制
$search= $tab->find('all')
             ->select(['Id', 'tab.timedate ', 'tab.value','difValue' => 
               'tab.value - t2.value'])
             ->andWhere(['t3.Id LIKE' => $id])
             ->where(['tab.timedate IN (SELECT max(tab.timedate) FROM tab 
               GROUP BY tab.Id)'])
             ->distinct(['tab.Id'])
                ->join([
                    't3' => [
                        'table' => 'tab3',
                        'conditions' => 't3.Id= tab.Id ',
                    ],
                    't2' => [
                        'table' => 'tab',
                        'conditions' => ' t2.Id= tab.Id
                    ]
                ]);

我如何设置他为t2值取第二次最后约会的联接(t2)?我试图将它添加到我的条件t2中,但是它需要第一次约会。

代码语言:javascript
复制
 ...AND tab.timedate > t2.timedate - INTERVAL 1 DAY'

也许还有别的办法可以解决这个问题。我只想给你打电话。最后一次日期:值和第二次最后时间日期:值(最后值-秒最后值=> "difValue")

EN

回答 1

Stack Overflow用户

发布于 2017-04-27 16:25:49

为了清晰起见,我增加了,而不是减去--只是为了与众不同。请注意,外部查询中对“current”的引用实际上只是对任何碰巧是主键的引用。

代码语言:javascript
复制
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT total 
  FROM 
     ( SELECT @i:=@i+i total
            , @i:=i current 
         FROM ints
            , (SELECT @i:=0) vars 
        ORDER 
           BY i DESC 
        LIMIT 2
     ) x 
 ORDER 
    BY current 
 LIMIT 1;
+-------+
| total |
+-------+
|    17 |
+-------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43661763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档