dtn55928 2016-08-05 07:03
浏览 158
已采纳

SQL SELECT仅包含两个不同表中列的MAX值的行

My two table setup is like below:

table1

+------+---------+--------------------------------------+
| id   | tail    | content                              |
+------+---------+--------------------------------------+
| 1    | abc     | ...                                  |
| 2    | def     | ...                                  |
| 3    | ghi     | ...                                  |
| 4    | def     | ...                                  |
| 5    | jkl     | ...                                  |
+------+-------+----------------------------------------+

table2

+------+--------+---------------------------------------+
| id   | tailID | value   |  others                     |
+------+--------+---------------------------------------+
| 1    | 2      | 412     |                             |
| 2    | 3      | 215     |                             |
| 1    | 2      | 571     |                             |
| 1    | 4      | 123     |                             |
+------+--------+---------------------------------------+

I like to get all columns from this two tables in a row with matched tail = tailID but not duplicate rows which has same tail.

For the duplicate TAIL, just need to get the single row of max VALUE of same tail.

I am currently using

SELECT table1.tail, table2.other_column 
FROM table1 
INNER JOIN table2 
on table1.id = table2.tailID 
WHERE table1.some_coloum = "a sepecific string" 
ORDER BY table2.value

But it returns many duplicates of same tail.

I just need to have single row for duplicate TAIL with hightes VALUE of table2.

  • 写回答

3条回答 默认 最新

  • duanguzhong5776 2016-08-05 07:24
    关注

    DISTINCT with CROSS APPLY:

    SELECT DISTINCT t1.tail,
                    t2.other_column,
                    t3.[value]
    FROM table1 t1
    CROSS APPLY (
        SELECT  tailid,
                MAX([value]) as [value]
        FROM table2
        WHERE tailid = t1.id
        GROUP BY tailid
        ) as t3
    INNER JOIN table2 t2
        ON t2.tailid = t3.tailid AND t3.[value] = t2.[value]
    WHERE t1.some_coloum = "a sepecific string" 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法