数字小于的第一行索引

Posted

技术标签:

【中文标题】数字小于的第一行索引【英文标题】:The first row index the number is smaller than 【发布时间】:2019-07-18 11:29:54 【问题描述】:

我有两张桌子

我喜欢在第一个表中添加一列。此列应包含表 2 中小于表 1 值的最小列号。这种比较应该根据 ID 号进行。期望的结果是:

【问题讨论】:

那么你的问题是什么?你已经说明了你想要什么,但仅此而已。如果您知道自己需要做什么,则不需要我们的许可;但如果你觉得你需要它,你有我的。 没有必要自大。显然我需要一些帮助或指导来做到这一点。我可能会补充一点,我尝试使用 while 循环来解决它,但它变得非常混乱,对我来说不起作用。 您使用的是什么版本的 SQL Server? 我一点也不“自大”。 Stack Overflow 是一个提问的网站;如果您没有问题,我们将无法帮助您。 “你能指导我吗”不是一个问题,并且会被认为是广泛的 SO。如果您进行了一些尝试,那么请在您的问题中显示这些内容,当您编辑它以询问我们可以帮助您的问题时。 How do I ask a good question?。一旦我们知道您的问题,那么志愿者将非常乐意尝试回答(包括我自己)。 所以对于这个问题我不太确定。我正在通过 SQL Server Management Studio 使用 Azure 数据仓库。回答够了吗? 【参考方案1】:

这假设第二个表中的值是升序的,并且 id 在第二个表中是唯一的。

例如,如果第一个表中的值大于所有列,它也会返回“6”,即使只有 5 列,但这应该相对容易处理。

CREATE TABLE #t1 (id CHAR(1), val FLOAT);
CREATE TABLE #t2 (id CHAR(1), col1 FLOAT, col2 FLOAT, col3 FLOAT, col4 FLOAT, col5 FLOAT);

INSERT INTO #t1 
VALUES ('a',1),('b',2),('c',3),('a',2);

INSERT INTO #t2
VALUES  ('a',1,2,3,4,5),
        ('b',1,1.5,2,10,11),
        ('c',-1,1,1.5,3,4);

-- unpivot the data into key value pairs
SELECT  id, name, val
INTO #t2u 
FROM 
(
SELECT *
from #t2
) a
UNPIVOT
(
val
FOR name IN ([col1],[col2],[col3],[col4],[col5])
) u

-- now count how many are less than or equal then add 1 because we want the next col
SELECT #t1.id, 
    #t1.val,
    COUNT(*) + 1
FROM #t1
LEFT OUTER JOIN #t2u ON #t2u.id = #t1.id
    AND #t2u.val <= #t1.val
GROUP BY #t1.id,
         #t1.val; 

【讨论】:

非常感谢。这是一个非常好的解决方案!我从中学到了很多。 很高兴您发现它很有用。请投票并接受答案,给我光荣的互联网积分

以上是关于数字小于的第一行索引的主要内容,如果未能解决你的问题,请参考以下文章

查找一行中是不是有 n 个小于某个数字的数据点

算法设计与分析 5.3 数字排列

华为机试真题 C++ 实现移除 K 位数字后的最小数

如何仅获取以“1”开头的文件中的第一行。后跟除数字以外的任何字符?

1115.数字求和

c#查找最长连续子数组第一个和最后一个元素索引