假设我有一个应用程序,它从项目池中向用户呈现两个随机结果。用户选择一个作为“赢家”,结果将被记录如下:
INSERT INTO results (winner_id, loser_id) VALUES (26, 45);
Run Code Online (Sandbox Code Playgroud)
使用结果表对项目进行排名的最佳方法是什么?
这个问题有一个理论/主观成分,也就是说,考虑对它们进行排名的方法不止一种。
例如,这与棒球赛季没有太大区别。棒球只是通过比较获胜百分比来选择获胜者。但是在棒球比赛中,您可能会以比底特律更好的胜率击败克利夫兰,但底特律今年每次比赛都击败了克利夫兰。所以从胜率之外的另一个角度来看,你可以说底特律比克利夫兰更好。
这是我感兴趣的另一个观点。如果你从两个项目(A 和 B)开始,从结果表中知道 B 击败 A 30 次,输了 5 次,你知道 B 应该排在 A 之上。然后你看看 C,对 B 是 8-10,对 A 是 12-6,把它放在 B 和 A 之间。等等。
似乎我在描述一个相当简单的公式,但是当您开始扩展它时,对于大量项目来说,它的计算量似乎会变得非常繁重,而对于不属于两个项目之间的项目来说,这将是有问题的根据到目前为止的排名,预计它会介于两者之间。
你认为这样的排名系统可行吗?这个概念已经有了名字吗?是否有可能建立一个查询系统,以便在 Web 应用程序中合理地为 10,000 个项目实时提供结果?
如果您使用以下方法获取某些视图的定义sys.sp_helptext:
exec sys.sp_helptext 'sys.columns'
CREATE VIEW sys.columns
AS
SELECT c.id AS object_id,
c.NAME,
c.colid AS column_id,
c.xtype AS system_type_id,
c.utype AS user_type_id,
c.length AS max_length,
c.prec AS PRECISION,
c.scale,
CONVERT(SYSNAME, CollationPropertyFromId(c.collationid, 'name')) AS collation_name,
sysconv(bit, 1 - ( c.status & 1 )) AS is_nullable,-- CPM_NOTNULL
sysconv(bit, c.status & 2) AS is_ansi_padded,-- CPM_NOTRIM
sysconv(bit, c.status & 8) AS is_rowguidcol,-- CPM_ROWGUIDCOL
sysconv(bit, c.status & 4) AS is_identity,-- CPM_IDENTCOL
sysconv(bit, c.status & 16) AS is_computed,-- CPM_COMPUTED
sysconv(bit, c.status & 32) AS …Run Code Online (Sandbox Code Playgroud) 我有一个 1:m 协会。
symbols表中有很多行company_key_statistics。company_key_statistics有一个时间戳列createdAt,指示行的创建时间。我需要加入最新symbols的company_key_statistics,但我只需要最新的company_key_statistics。例如,我需要获取ORCL并且MSFT symbols仅获取他们最新的company_key_statistics.
到目前为止我已经尝试过了。
SELECT `symbols`.`id`,
`symbols`.`symbol`,
`statistics`.
`marketCapitalization`
FROM `symbols`
LEFT JOIN (SELECT `s`.`companyId`,
`s`.`marketCapitalization`
FROM `company_key_statistics` AS `s`
WHERE `s`.`companyId` = `symbols`.`id`
ORDER by `createdAt`
DESC LIMIT 1) AS `statistics`
ON `symbols`.`id` = `statistics`.`companyId`
WHERE `symbols`.`symbol` IN ('ORCL', 'SNAP');
Run Code Online (Sandbox Code Playgroud)
但不幸的是我发现我不能在子查询中使用父查询中的列JOIN。
我怎样才能做到这一点?
下面的脚本将查询 Ola 的维护解决方案结果表 (CommandLog),并在过去 4 周内对每两周一次的重新索引执行持续时间进行比较。
现在看起来,这是一个快速的技巧,可以帮助我调整维护窗口。但我想删除日期硬编码,这样我就不必在未来的每个周末手动添加一个新的 JOIN。
请提供完整的重写(动态 SQL?)或仅提供有关如何实现此功能或要包含的其他一些有用功能的一些提示。确定更改 sproc 并将额外的输出添加到表中。使用 SQL 2016。如果已经有一个脚本可以满足这个目的,那么很高兴使用那个脚本。
WITH t0 AS
(
SELECT ObjectName, IndexName, IndexType
FROM Tools.dbo.CommandLog
WHERE 1=1
AND DatabaseName = 'testdb'
AND CommandType = 'ALTER_INDEX'
GROUP BY ObjectName, IndexName, IndexType
)
SELECT
t0.ObjectName
,t0.IndexName
,t0.IndexType
,DATEDIFF(ss,t1.StartTime,t1.EndTime) as '20-40 01-06'
,DATEDIFF(ss,t2.StartTime,t2.EndTime) as '5-40 01-07'
,DATEDIFF(ss,t3.StartTime,t3.EndTime) as '20-40 01-13'
,DATEDIFF(ss,t4.StartTime,t4.EndTime) as '5-40 01-14'
,DATEDIFF(ss,t5.StartTime,t5.EndTime) as '20-40 01-20'
,DATEDIFF(ss,t6.StartTime,t6.EndTime) as '5-40 01-21'
,DATEDIFF(ss,t7.StartTime,t7.EndTime) as '20-40 01-27'
,DATEDIFF(ss,t8.StartTime,t8.EndTime) as '5-40 01-28'
FROM t0
LEFT JOIN …Run Code Online (Sandbox Code Playgroud) 我必须使用远程服务器 Windows 身份验证从本地计算机远程连接到 MSSQL 数据库。
我需要将每日 XML 文件集成到我的系统中。
XML 文件具有与此类似的架构:
create table txml(id int identity, data xml);
insert into txml (data) values ('
<order>
<trans DTrans="20170102" HTrans="10:52"></trans>
<head Id="552665566"></head>
<lin headId="552665566">
<dLin Id="00001" CoArt="1111111" CoArtCust="05220001" NameArt="Product1" dateVal="20161115" />
<acum DCalAcm="20170101" DIniAcm="20161115"><qtyAcm Qty="1101163.00" /></acum>
<lastOrd Id="95767" QtyLastOrd="12000.00" DLastOrd="20170101" />
<pLin LType="4"><uni Qty="24000.00"/><dIni Date="20170104"/><dEnd Date="20170108"/></pLin>
<pLin LType="4"><uni Qty="20000.00"/><dIni Date="20170109"/><dEnd Date="20170112"/></pLin>
<pLin LType="4"><uni Qty="24000.00"/><dIni Date="20170113"/><dEnd Date="20170116"/></pLin>
</lin>
<lin headId="552665566">
<dLin Id="00002" CoArt="2222222" CoArtCust="05269958" NameArt="Product2" dateVal="20161101" />
<acum DCalAcm="20170101" DIniAcm="20161101"><qtyAcm Qty="552652.00" /></acum>
<lastOrd Id="49956" QtyLastOrd="5000.00" DLastOrd="20170101" />
<pLin LType="4"><uni …Run Code Online (Sandbox Code Playgroud) 是否有可以在 Mac 上安装和运行的 SQL 分析器 MSSSQL?只要它可以在我的 Mac OS 上运行,它是否是付费版本并不重要。谢谢。
我被要求为一些人创建一些 sql server 报告(创建一个报告并通过电子邮件发送它们)。我以为会是 2 或 3 个,但现在他们知道我可以做到,每周我都需要再创建 1 或 2 个报告。
我使用 SQL Agent 和一些步骤来创建一个表,填充所需的结果,然后将它发送到一个 xls 文件中。那真的不是问题,但我想知道什么可以更好地用于此任务,因为现在我的 SQL 代理上有 20 多个作业。一切都井井有条,等等,但我仍然不喜欢看它。我已经有很多 DBA 工作,我不想混杂。
报告服务是一种可行的方法吗?我可以正常创建一个查询,他们将它发送到一个 excel 文件并通过电子邮件发送它而不使用 C# 或 Visual Studio 吗?
sql-server-2012 reporting enterprise-edition powerbi-report-server
我写了一篇与此类似的声明。我是 SQL 新手,想知道如何或是否可以使用SUM(___)over(partition by ___) 该 PartID 的所有 NonUsableTotal 零件库存求和。
问题是这f.Netflag是一个数值,可以1 or 0将其定义为可用或不可用。
这是声明:
select distinct
l.whse,
l.partid,
i.descr,
l.qty,
case when f.Netflag=0 then 'NONUsable' else 'Usable' end as UsableStatus,
SUM(l.qty*f.Netflag) over (partition by l.partid) as TotalUsable
from location l (nolock)
join inventory i (nolock)
on l.partid=i.partid
join loctable f (nolock)
on l.whse=f.whse
Run Code Online (Sandbox Code Playgroud)
这是我希望结果的样子:
+-------+--------+-----+------------+-----------+--------------+
|Partid | Whse | Qty |UsableStatus|TotalUsable|TotalNonUsable|
+-------+--------+-----+------------+-----------+--------------+
134 INSP 10 Usable 30 20
134 RRR 15 NONUsable 30 20
134 …Run Code Online (Sandbox Code Playgroud) 我正在运行以下更新命令
UPDATE table
SET [End] = '2018-12-17'
WHERE (ID = '5b010204-c12c-4b38-8d28-affe11684da0')
Run Code Online (Sandbox Code Playgroud)
什么会导致 SQL Server 14 出现这种情况?