相关疑难解决方法(0)

SQL - 仅在一列上选择distinct

我已经远远地搜索了这个问题的答案.我正在使用Microsoft SQL Server,假设我有一个如下所示的表:

+--------+---------+-------------+-------------+
| ID     | NUMBER  | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | 3968    | UK          | English     |
| 2      | 3968    | Spain       | Spanish     |
| 3      | 3968    | USA         | English     |
| 4      | 1234    | Greece      | Greek       |
| 5      | 1234    | Italy       | Italian     |
Run Code Online (Sandbox Code Playgroud)

我想执行一个只选择唯一"NUMBER"列的查询(无论是第一行还是最后一行都不会打扰我).所以这会给我:

+--------+---------+-------------+-------------+
| ID     | NUMBER  | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | 3968    | UK          | English     | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server unique distinct

40
推荐指数
2
解决办法
13万
查看次数

SELECT DISTINCT在一列上,返回多个其他列(SQL Server)

我正在尝试编写一个查询,从每个独特设备的GPSReport表返回最新的GPS位置.表中有50个设备,所以我只想要返回50行.

这是我到目前为止(不工作)

SELECT TOP(SELECT COUNT(DISTINCT device_serial) FROM GPSReport) * FROM GPSReport AS G1
RIGHT JOIN
(SELECT DISTINCT device_serial FROM GPSReport) AS G2
ON G2.device_serial = G1.device_serial
ORDER BY G2.device_serial, G1.datetime DESC
Run Code Online (Sandbox Code Playgroud)

这将返回50行,但不会为每个device_serial返回唯一的行.它返回第一个设备的所有报告,然后返回第二个设备的所有报告等.

我想在一个查询中做什么?

sql t-sql sql-server sql-server-2005

18
推荐指数
2
解决办法
9万
查看次数

SQL - 从左连接中删除重复项

我正在创建两个表的连接视图,但是从table2获得了不需要的重复项.
例如:table1有9000条记录,我需要生成的视图包含完全相同的内容; table2可能有多个具有相同FKID的记录,但我只想返回一条记录(随机选择对我的客户来说是好的).我有以下代码正常工作,但性能比期望慢(超过14秒).

SELECT     
    OBJECTID
    , PKID
    ,(SELECT TOP (1) SUBDIVISIO
        FROM dbo.table2 AS t2
        WHERE (t1.PKID = t2.FKID)) AS ProjectName
    ,(SELECT TOP (1) ASBUILT1
        FROM dbo.table2 AS t2
        WHERE (t1.PKID = t2.FKID)) AS Asbuilt
FROM dbo.table1 AS t1
Run Code Online (Sandbox Code Playgroud)

有没有办法与连接类似的东西来加快性能?
我正在使用SQL Server 2008 R2.
我接近以下代码(约.5秒),但是'Distinct'仅在所有列重复时过滤掉记录(而不仅仅是FKID).

SELECT
    t1.OBJECTID
    ,t1.PKID
    ,t2.ProjectName
    ,t2.Asbuilt
FROM dbo.table1 AS t1
    LEFT JOIN (SELECT
        DISTINCT FKID
        ,ProjectName
        ,Asbuilt
        FROM dbo.table2) t2
    ON t1.PKID = t2.FKID
Run Code Online (Sandbox Code Playgroud)

表格示例

table1          table2

OID, PKID       FKID, ProjectName, Asbuilt
1, id1          id1, P1, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server join

8
推荐指数
1
解决办法
3万
查看次数

如何使用SQL有效地确定行之间的更改

我有一个非常大的MySQL表,包含从许多传感器读取的数据.基本上,有一个时间戳和一个值列.我将省略传感器ID,在此处索引其他详细信息:

CREATE TABLE `data` (
  `time` datetime NOT NULL,
  `value` float NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

value列很少更改,我需要找到发生这些更改的时间点.假设每分钟都有一个值,以下查询将返回我需要的内容:

SELECT d.*, 
  (SELECT value FROM data WHERE time<d.time ORDER by time DESC limit 1) 
    AS previous_value 
FROM data d 
HAVING d.value<>previous_value OR previous_value IS NULL;

+---------------------+-------+----------------+
| time                | value | previous_value |
+---------------------+-------+----------------+
| 2011-05-23 16:05:00 |     1 |           NULL |
| 2011-05-23 16:09:00 |     2 |              1 |
| 2011-05-23 16:11:00 |   2.5 |              2 |
+---------------------+-------+----------------+
Run Code Online (Sandbox Code Playgroud)

唯一的问题是这是非常低效的,主要是由于依赖子查询.使用MySQL 5.1提供的工具优化它的最佳方法是什么?

最后一个约束是在将值插入数据表之前不对它们进行排序,并且它们可能在以后更新.这可能会影响任何可能的去规范化策略.

mysql sql optimization query-optimization

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

SELECT DISTINCT返回所有值

我有问题SQL SELECT DISTINCT,和PHP/jQuery.我正在使用自动完成功能,它正在工作,但不是预期的.我有一些行的数据库:

Lukoil..
Lukoil..
Statoil..
Statoil..
Statoil..
Neste..
Neste..
Run Code Online (Sandbox Code Playgroud)

我有SQL查询:

SELECT DISTINCT name FROM poi_example WHERE name LIKE '%$text%' ORDER BY name ASC
Run Code Online (Sandbox Code Playgroud)

但是当我在搜索输入中键入一个名字时,我没有得到不同的值:

在此输入图像描述

所以我需要你提供的服务,

数据库输出:

INSERT INTO `poi_example` (`id`, `name`, `description`, `lat`, `lon`, `city`, `rajonas`) VALUES
(24, 'Statoil', 'Veiverių pl. 49a, Kaunas   tel.: 8-37 39 10 62   Degalinės darbo laikas Visą parą  Plovyklų darbo laikas: Visą parą', '54.88111', '23.89360', 'Kaunas', 'Aleksotas'),
(25, 'Statoil', 'Karaliaus Mindaugo pr.34a, Kaunas   tel.: 8-37 42 37 29      DegalinÄ—s darbo laikas VisÄ… …
Run Code Online (Sandbox Code Playgroud)

php mysql sql jquery

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

MySQL错误:SELECT列表不在GROUP BY子句中

我的查询有问题,mysql抛出以下错误:

#1055 - Expression #66 of SELECT list is not in GROUP BY clause and 
contains nonaggregated column 's.status' which is not functionally 
dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)

查询是:

select   p.*,
pd.*,
m.*,
IF(s.status, s.specials_new_products_price, null) as specials_new_products_price,
IF(s.status, s.specials_new_products_price, p.products_price) as final_price
FROM products p 
LEFT JOIN specials s ON p.products_id = s.products_id  
LEFT JOIN manufacturers m using(manufacturers_id) , 
          products_description pd,
          categories c,
          products_to_categories p2c
WHERE p.products_view = 1  
AND p.products_status = …
Run Code Online (Sandbox Code Playgroud)

mysql group-by mysql-error-1055

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