小编ype*_*eᵀᴹ的帖子

SQL中的自定义顺序

我们正在查询数据库以便以下列方式检索数据

从table1中选择a,b,... f,其中id为(6,33,1,78,2)

我从查询中得到的结果按顺序1,2,6,33,78.

我希望结果的顺序相同(6,33,1,78,2).有没有办法以相同的顺序检索数据.

编辑 *我正在使用SQL 2008*

sql sql-server-2008

6
推荐指数
1
解决办法
1502
查看次数

带LIMIT1的SQL返回所有记录

我犯了一个错误并输入了:

SELECT * FROM table LIMIT1

代替

SELECT * FROM table LIMIT 1(注意之间的空间LIMIT1)

在MySQL的CLI中.我希望收到某种解析错误,但我很惊讶,因为查询返回了表中的所有记录.我的第一个想法是"愚蠢的MySQL,我打赌这会在PostgreSQL中返回错误",但PostgreSQL也返回了所有记录.然后用SQLite测试它 - 结果相同.

经过一番挖掘,我意识到我在桌子后输入的内容并不重要.只要没有WHERE/ORDER/GROUP条款:

SELECT * FROM table SOMETHING -- works and returns all records in table

SELECT * FROM table WHERE true SOMETHING -- doesn't work - returns parse error
Run Code Online (Sandbox Code Playgroud)

我想这是一种标准化的行为,但我找不到任何解释为什么会这样.有任何想法吗?

sql

6
推荐指数
1
解决办法
463
查看次数

左外连接处的最大条件

----------
samples
----------
SamplesID
stylenumber
stylename
status

-----------
samples_details
-----------
Samples_Details_ID
SamplesID
CustomerName
date_out
date_returned
updated (timestamp)
status

------------
samples_pictures
------------
SamplesPicID
SamplesID
Run Code Online (Sandbox Code Playgroud)

尝试编写一个查询,该查询为我提供了示例的所有行,samples_pictures的所有匹配项(如果有)以及samples_details的最新记录(如果有)。因此,有两个左外部联接,但一个仅检索最新记录。

什么不起作用:

SELECT samples.*
     , samples_pictures.SamplesPicID
     , CustomerName
     , date_out
     , date_returned
     , updated
     , samples_details.status as txn_status 
FROM samples 
    LEFT OUTER JOIN
      ( SELECT Samples_Details_ID
             , samples_details.status as txn_status
             , MAX(updated) as MaxUpdated
        FROM samples_details
        GROUP BY Samples_Details_ID
      ) AS MaxTable
      ON MaxTable.SamplesID = samples.SamplesID 
    LEFT OUTER JOIN samples_pictures
      ON samples.SamplesID = samples_pictures.SamplesID
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

mysql

5
推荐指数
1
解决办法
6936
查看次数

扭曲的应用程序没有扭曲

我使用Twisted框架为自己写了一个不错的应用程序.我使用如下命令启动它:

twistd -y myapp.py --pidfile=/var/run/myapp.pid --logfile=/var/run/myapp.log
Run Code Online (Sandbox Code Playgroud)

它很棒=)

为了启动我的应用程序,我用这个命令编写了一个脚本,因为我很懒惰^^但是因为我使用相同的twistd选项启动我的应用程序,并且我修改脚本shell解决方案是丑陋的,我怎么能做同样但在我的应用程序内?我想通过刚刚完成./myapp并且没有shell工作来启动我的应用程序.

我试图在扭曲的文档和阅读扭曲的源代码中搜索它,但我不明白它,因为它是我的第一个Python应用程序(精彩的语言顺便说一句!)

在此先感谢任何帮助.

python daemon twisted

5
推荐指数
1
解决办法
3706
查看次数

使用GROUP BY和ORDER BY优化对JOINed表的MySQL查询,而不使用嵌套查询

这对我来说感觉像是一个初学SQL问题,但是这里有.这就是我想要做的:

  • 将三个表连接在一起,产品,标签和链接表.
  • 将标记聚合到一个逗号分隔的字段中(因此GROUP_CONCAT和GROUP BY)
  • 限制结果(至30)
  • 将结果按"创建"日期的顺序排列
  • 避免在可能的情况下使用子查询,因为它们对使用Active Record框架的代码特别不愉快

我已经描述了本文底部涉及的表格,但这是我正在执行的查询

   SELECT p.*, GROUP_CONCAT(pt.name) 
     FROM products p
LEFT JOIN product_tags_for_products pt4p ON (pt4p.product_id = p.id)
LEFT JOIN product_tags pt ON (pt.id = pt4p.product_tag_id)
 GROUP BY p.id
 ORDER BY p.created 
    LIMIT 30;
Run Code Online (Sandbox Code Playgroud)

有大约280,000个产品,130个标签,524,000个链接记录,我已经分析了表格.问题是它需要花费80多秒才能运行(在合适的硬件上),这对我来说是错误的.

这是EXPLAIN的结果:

id   select_type    table    type    possible_keys                    key                              key_len    ref                   rows  Extra
1    SIMPLE         p        index   NULL                             created                          4          NULL                  30    "Using temporary"
1    SIMPLE         pt4p     ref     idx_product_tags_for_products    idx_product_tags_for_products    3          s.id                  1     "Using index"
1    SIMPLE         pt       eq_ref  PRIMARY                          PRIMARY                          4 …
Run Code Online (Sandbox Code Playgroud)

mysql query-optimization

5
推荐指数
1
解决办法
348
查看次数

需要SQL Server查询来解决三阶多项式回归问题

任何人都可以帮助一些SQL查询代码来提供三阶多项式回归的系数估计吗?

请假设我有一个X和Y数据值表,并想要估算a,b和c:

Y(X) = aX + bX^2 + cX^3 + E 
Run Code Online (Sandbox Code Playgroud)

sql math regression

5
推荐指数
1
解决办法
3030
查看次数

DISTINCT BY MAX()?

如何获得TypeID具有最大值的不同行EffectivityDate

原始表

-----------------------------------------
| ID | TypeID | Value | EffectivityDate |
-----------------------------------------
|  1 |      1 |   2.3 |      1990-01-01 |
|  2 |      1 |   3.4 |      1999-10-31 |
|  3 |      2 |   1.1 |      1990-01-01 |
|  4 |      2 |   2.2 |      1999-10-31 |
|  5 |      3 |   6.1 |      1999-10-31 |
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)

查询结果

-----------------------------------------
| ID | TypeID | Value | EffectivityDate |
-----------------------------------------
|  2 |      1 | …
Run Code Online (Sandbox Code Playgroud)

mysql sql

5
推荐指数
2
解决办法
156
查看次数

维护MySQL数据库表中元素的顺序或在MySQL的特定位置插入新行

我有一个数据库表,维护一些信息,并需要保留订单.基本上如果我列出了元素1到5,并且我想添加一个新元素,那么它可以插入到现有行中的任何位置,可以是最后一个,5之后,1之前的开始或中间的某个位置,例如3之后有没有办法使用MySQL INSERT语句并指定我们应该在哪一行插入索引?

我认为不是.所以我的策略是创建另一个列'order_number',它基本上记录了元素的顺序.例如,如果记录表具有主键(record_id)和并排列出的order_number,它将如下所示:

 record_id     order_number

    1              1    
    2              2    
    3              3
    4              4
    5              5
Run Code Online (Sandbox Code Playgroud)

要在第3行之后向此行添加新元素,生成的结束表将如下所示:

 record_id     order_number

    1             1
    2             2
    3             3
  **6**         **4**         <------ added row 
    4           **5**         <-- changed order_number
    5           **6**         <-- changed order_number
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以通过简单地选择我想要的数据并提供Order By order_number asc子句来清楚地实现我想要的顺序.

但是,正如您所看到的,要做一个简单的Insert,它需要我更新它之后出现的每个其他行的order_number.该表预计至少具有大量的行(大小为100,000),并且在每次单个插入操作时简单地更新每隔一行(因此锁定表)根本不可行.

在这种情况下,什么是更好的推荐策略?

mysql schema database-design database-schema

5
推荐指数
2
解决办法
3424
查看次数

SQL Server 2005查询的性能

--------------------这需要4秒才能执行(有2000 000行)为什么?---------------- -----

DECLARE @AccountId INT 
DECLARE @Max INT 
DECLARE @MailingListId INT 

SET @AccountId = 6730
SET @Max = 2000
SET @MailingListId = 82924

SELECT TOP (@Max) anp_Subscriber.Id , Name, Email 
FROM anp_Subscription WITH(NOLOCK) 
  INNER JOIN anp_Subscriber WITH(NOLOCK) 
    ON anp_Subscriber.Id = anp_Subscription.SubscriberId
WHERE [MailingListId] = @MailingListId 
  AND Name LIKE '%joe%' 
  AND [AccountID] = @AccountId
Run Code Online (Sandbox Code Playgroud)

---------------------这需要<1秒才能执行(有2000 000行)---------------- -------

SELECT TOP 2000 anp_Subscriber.Id ,Name, Email 
FROM anp_Subscription WITH(NOLOCK) 
  INNER JOIN anp_Subscriber WITH(NOLOCK)
    ON anp_Subscriber.Id = anp_Subscription.SubscriberId
WHERE [MailingListId] = 82924 
  AND Name …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005

4
推荐指数
1
解决办法
161
查看次数

GROUP BY中的ORDER BY和LIMIT

我想在GROUP BY中获取一些记录子集,我已经看到了很多疯狂的解决方案,但它们看起来太复杂了,有没有更有效的方法来做到这一点.

SELECT user_id, GROUP_CONCAT(item_id ORDER BY `timestamp`) AS items 
FROM wb_user_book_current_item GROUP BY user_id
Run Code Online (Sandbox Code Playgroud)

所以这将返回给我所有用户的所有当前项目,这是目前为止还可以.但我只想要十件最新的东西.添加ORDER BYGROUP_CONCAT帮助,但它仍然没有给我最后十条记录.

编辑

如果我做这样的事情和硬编码user_id然后我可以得到我想要的那个用户的结果,问题是结合它,所以我不需要硬编码,user_id并且可以例如只是让所有用户最后十个项目

SELECT GROUP_CONCAT(cp2.item_id) AS items 
FROM (SELECT cp.user_id, cp.item_id 
      FROM wb_user_book_current_item cp 
      WHERE cp.user_id=1 ORDER BY cp.`timestamp` 
      LIMIT 10) AS cp2 
GROUP BY cp2.user_id
Run Code Online (Sandbox Code Playgroud)

mysql sql group-by limit greatest-n-per-group

4
推荐指数
1
解决办法
2万
查看次数