我不知道是否为此问题选择了合适的标题(如果没有,请相应地更改它),但是请考虑以下我正在使用的简化表结构:
----------------------------------------------
| date | i | j | k | x | y | z |
----------------------------------------------
| 100209 | 1 | 2 | 3 | 4 | 5 | 6 |
----------------------------------------------
| 100210 | 2 | 3 | 4 | 5 | 6 | 7 |
----------------------------------------------
| 100211 | 0 | 1 | 2 | 3 | 4 | 5 |
----------------------------------------------
| 100212 | 1 | 2 | 3 | 4 | 5 | 6 |
----------------------------------------------
| 100213 | 6 | 5 | 4 | 3 | 2 | 1 |
----------------------------------------------
i
,j
,k
,x
,y
,z
都是不相关的整数/浮筒,它们都代表不同的因素,并可以具有数量级的非常不同的顺序( i
范围可从1 -
10,而j
的范围可以从100 - 1000
)。
我正在尝试选择条件相似的日期。给定一组i
,j
,k
,x
,y
,z
值我需要 返回由下令所有结果 接近
所有值作为一个整体
,例如,如果i = 1
,j = 2
,k = 3
,x = 4
,y = 5
和z = 6
查询应按此顺序返回日期如下:
我不知道这是否是相关或不的问题,但一些值(
i
,
j
,
k
)的意思是
越多越好 ,而其他值(
x
,
y
,
z
)的意思正好相反:
越少越好 。
我应该如何建立这样的查询? 仅使用SQL是否有可能?
我会尽力回答您的意见。这是我的数据样本:
---------------------------------------------------------------------------------
date | temperature | humidity | pressure | windSpeed | moonDistance
---------------------------------------------------------------------------------
090206 | 7 | 87 | 998.8 | 3 | 363953
---------------------------------------------------------------------------------
...... | ... | ... | .... | ... | ......
---------------------------------------------------------------------------------
100206 | 10 | 86 | 1024 | 2 | 386342
---------------------------------------------------------------------------------
100207 | 9 | 90 | 1015 | 1 | 391750
---------------------------------------------------------------------------------
100208 | 13 | 90 | 1005 | 2 | 396392
---------------------------------------------------------------------------------
100209 | 12 | 89 | 1008 | 2 | 400157
---------------------------------------------------------------------------------
100210 | 11 | 92 | 1007 | 3 | 403012
---------------------------------------------------------------------------------
100211 | 6 | 86 | 1012 | 2 | 404984
---------------------------------------------------------------------------------
100212 | 6 | 61 | 1010 | 3 | 406135
---------------------------------------------------------------------------------
100213 | 7 | 57 | 1010 | 2 | 406542
---------------------------------------------------------------------------------
我的表结构具有更多的列和数千行,但是希望这足以使我的观点清楚。我不会尝试像上一个示例中那样对这些值进行排序,因为我可能会弄错了,但是我基本上需要使用此数据执行两种类型的查询:
我知道可以通过使用第一个查询轻松地归档第二个查询,但是我的问题在于使用几列进行相似排序,这就是我的意思,即“ 按 整体上所有值的 紧密
程度进行排序”。就像,如果我只处理一列,按 相似性 排序会容易 得多, 但是当处理几列时,我的头确实开始旋转。
目标是能够产生如下结果:
今天确实类似于d / m / yy,非常类似于d / m / yy,有点类似于d / m / yy,…
就我而言,我与天气和大气数据工作,但如果它可以帮助我猜你能想到在这个问题上来讲employees
(有attendance
,hoursPerWeek
并monthlySalary
通过员工认为最相似列)和秩序attendance = 100%
,hoursPerWeek = 40
并monthlySalary = $5000
为实例。
PS:
现在我已经给出了这个雇员示例,现在我不确定是否可以将其与我正在使用的天气示例进行比较,因为有了employees表,您可以计算(rating = monthlySalary / hoursPerWeek * attendance
例如)列的权重但是我认为天气表不能做到同样的事情-
无论如何,我们赞赏大家的投入 。
PS2 :我不确定我是否表现得足够好,如果您仍有疑问,请告诉我。
赏金
到目前为止,有一些好的建议,但是没有一个能真正解决我的问题。我设立了一个赏金计划,希望能为该问题收集更多可能的解决方案。谢谢。
您似乎遇到的问题是每一列的比例都不同,因此您很难轻松地将它们组合在一起。可以使用称为增白的技术解决此问题。这涉及到计算每列的平均和标准偏差(您可以在1条SQL语句中执行此操作),然后在选择时将每列缩放为该值:
colSortPos = (colValue-colMean) / colStdev
这样做会使每一列的范围在0左右,标准偏差在+/- 1范围内,+
/-1。这里的问题是,这不是二维问题,因此您需要进行多维思考。因此,我的建议是将欧几里德距离作为您的排序顺序。
SELECT
date,
i,
j,
k,
SQRT( POW((i-@iMean)/@iStdDEv, 2) + POW((j-@jMean)/@jStdDEv, 2) + POW((k-@kMean)/@kStdDEv, 2) )
AS
sort_order
FROM
table
ORDER BY
sort_order
唯一的问题是,它将问题投影到一维空间上可能会使您错过一些相关性。要解决此问题,我建议使用像K-
means这样的聚类技术,该技术实施起来非常简单,而且速度非常快。这将允许您将日期分组为k个群集,这些群集显示最相似的[
http://en.wikipedia.org/wiki/K-means_clustering
]。如果您有原始数据并想使用这些(和其他)技术,那么我建议您尝试使用weka工具包[
http://www.cs.waikato.ac.nz/ml/weka/
],它将使您能够玩这些技术。
有一个集合,例如(1,4,2,5,7,6,9,8,3)。我们通过以下方式计算它的(FD):。inputArray是原始集。例如大小写为(1,4,2,5,7,6,9,8,3)。first差异是从inputArray创建的,方法如下:(inputArray的第二个元素)-(inputArray的第一个元素)等等。 所以给定集合的FD是(3,-2,3,2,-1,3,-1,-5)。任务是找到给定集合的多个
问题内容: 我想对整数的arraylist的arraylist进行排序,需要帮助吗? 我被告知,我需要实现比较器或可比对象,然后使用collection.sort对列表列表进行排序… 问题答案: 没有错误检查空列表,但是这里是。 使用Java 8,它变得更加简洁:
问题内容: 我有一个SQLite表,其格式如下: 学生列中有学生姓名,其他列中有描述各个科目的分数的数值。我想为每个学生找到的是他们学科的排名。例如,对于该行, 我想要的输出是 这是每个学生的全部5门科目的排名。输出不必采用我显示的格式。我只需要一个输出,指示每个学生每个学科的排名。如何在SQLite中实现它? 我发现了RANK和ROW_NUMBER,但不了解如何将它们用于多列。 问题答案: 我的
问题内容: 我得到以下结果 我要订购最近发生的事件。供应商具有最新的事件,因此应该首先与同一供应商的所有其他事件一起发生,然后是所有事件均按降序排列的下一个供应商。期望的结果是这样的- 没有给出期望的输出。有什么帮助吗? 问题答案: 使用分析功能: 请参阅: http: //docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj13658.html http://
我用的是拉威尔的背包,积垢舱。 如何将orderby()用于多列? 例子: 我看到src和orderby只接受一个参数。 有什么建议吗?