小编Lam*_*mak的帖子

带有where子句的SQL窗口函数?

我正在尝试为用户关联两种类型的事件.我希望在"A"事件之前看到所有事件"B"以及该用户的最新事件"A".如何实现这一目标?特别是,我正试图在Postgres中做到这一点.

我希望在窗口函数中可以使用"where"子句,在这种情况下,我基本上可以使用"where event ='A'"来执行LAG(),但这似乎不可能.

有什么建议?

数据示例:

|user |time|event|
|-----|----|-----|
|Alice|1   |A    |
|Bob  |2   |A    |
|Alice|3   |A    |
|Alice|4   |B    |
|Bob  |5   |B    |
|Alice|6   |B    |
Run Code Online (Sandbox Code Playgroud)

期望的结果:

|user |event_b_time|last_event_a_time|
|-----|------------|-----------------|
|Alice|4           |3                |
|Bob  |5           |2                |
|Alice|6           |3                |
Run Code Online (Sandbox Code Playgroud)

sql postgresql window-functions

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

时间轴相册中缺少照片

我正在使用Facebook Graph API来获取用户的所有照片,graphPath: me/albums并在Timeline Photos专辑中找到一些奇怪的东西.

照片存在于Facebook上的时间轴相册中,但不会从API调用graphPath/{timeline_photos_album_id}/photos中返回,或者返回的照片数量较少.

问题是什么?

日志:

呼叫专辑graphPath: me/albums:

.....
{
     "can_upload" = 0;
      count = 3; !!!!!!!!!!!
      "created_time" = "2013-06-18T10:43:27+0000";
      description = cool;
      from = {
                id = 100006100533891;
                name = "Mike Mike";
            };
      id = 1387760311437307;
      link = "https://www.facebook.com/album.php? 
          fbid=1387760311437307&id=100006100533891&aid=1073741829";
      name = "Timeline Photos";
      privacy = everyone;
      type = wall;
      "updated_time" = "2013-06-18T10:47:53+0000”;
 },
 .....
Run Code Online (Sandbox Code Playgroud)

致电专辑照片graphPath/{timeline_photos_album_id}/photos:

{
    data =     (
    );
}
Run Code Online (Sandbox Code Playgroud)

api facebook facebook-graph-api

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

如何将utf-8设置为mysql服务器的标准字符集?

我必须重新编译吗?

我想出了设置字符集值的不同方法

http://dev.mysql.com/doc/refman/5.5/en/charset.html

但是用其他值或my.cnf设置启动它什么都没改变.因为如果我这样做:

sudo mysqld --verbose --help | grep charact

它总是回答我latin1作为标准charset.系统是ubuntu lts服务器,带有标准的mysql安装.

mysql mysql-management utf-8 character-encoding

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

如何将行扩展为多行结果集?

我有一个表,我试图根据第二列值将每行分成一行或多行.像这样:

table (id, pcs):
ABC   3
DEF   1
GHJ   4

query result (id, pcs_num):
ABC   1
ABC   2
ABC   3
DEF   1
GHJ   1
GHJ   2
GHJ   3
GHJ   4
Run Code Online (Sandbox Code Playgroud)

我在SQL Server 2008中将其写为sproc.我最好的解决方案是使用游标并将[pcs]行数添加到表中每行的临时表中.似乎必须有一个比我更缺失的简单解决方案.谢谢.

sql sql-server sql-server-2008

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

tSQLt.FakeTable似乎不适用于具有常量/派生字段的视图

exec tSQLt.SetFakeViewOn 'dbo.viewWithIssues';
GO
CREATE PROCEDURE    TestChanges.[Test Data]
AS
BEGIN
...

exec tSQLt.FakeTable 'dbo.viewWithIssues', @identity=1, @ComputedColumns=1, @Defaults=1;
INSERT INTO dbo.viewWithIssues (clock_id, IsTerminated)
VALUES  ('1111', '0'), ('2222', '1'), ('3333', '1')

...
END
GO
exec tSQLt.SetFakeViewOff 'dbo.viewWithIssues';
GO
Run Code Online (Sandbox Code Playgroud)

然后在调用过程后继续填充#Actual和#Expected.它返回的错误是:更新或插入视图或函数'dbo.viewWithIssues'失败,因为它包含派生或常量字段.

有谁知道怎么解决这个问题?

sql tsqlt

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

将多列透视为 SQL Server 中的行?

我有一个像这样的数据表

create table temp
(
    colName varchar(50),
    name varchar(50),
    icon varchar(150),
    totalcount int
)

insert into temp values ('Eng1', 'Following', 'followingicon.png', 1564)

insert into temp values ('Eng2','Total Followers', 'followericon.png', 500)

insert into temp values ('Eng3','Direct Messages', 'messageicon.png', 800)
Run Code Online (Sandbox Code Playgroud)

如何选择并使数据显示为

最终结果

Eng1、Eng2 和 Eng3 是列标题

这是我到目前为止所得到的,但它只做第一级。我需要获得所有三个级别

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.colName) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query = 'SELECT ' + @cols + ' from 
            ( …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot unpivot

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

在sql中查找最常见的值并按从最高到最低的顺序排序(asc)

我有一个简单的查询.

    select id, patient_id, diagnosis from dbo.diabetes_rx_tracker

group by id, patient_id, diagnosis
Run Code Online (Sandbox Code Playgroud)

最常见的诊断代码需要显示在列表顶部并带有计数.

我尝试使用count函数.

但它将每个患者的所有值都返回为1而不是添加.

select id, patient_id, count(diagnosis) from dbo.diabetes_rx_tracker

group by id, patient_id, diagnosis
Run Code Online (Sandbox Code Playgroud)

在编辑我的小组时,我也一直在抛出错误.

任何帮助将不胜感激.谢谢.

sql sql-server sql-server-2008

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

从两个连续行检索组合的查询

我有一张桌子(time_period)

该表列出了几个时间段.

unique_id         type_id          sequence_number     billing_id   ...
    13              LJK1             1                  4356
    14              CNS3             2                  4356
    15              LJK1             3                  4356
    16              AOX4             4                  4356
    17              CNS3             1                  9827
    18              POD2             2                  9827
Run Code Online (Sandbox Code Playgroud)

这很棘手.我需要根据递增的序列号将所有type_id对从一个句点返回到下一个句点.例如,对于billing_id ='4356',我需要检索此结果集

-----------------------------------
LJK1       | CNS3                 -- type_ids pair from seq 1 to seq 2
CNS3       | LJK1                 -- type_ids pair from seq 2 to seq 3
LJK1       | AOX4                 -- type_ids pair from seq 3 to seq 4
Run Code Online (Sandbox Code Playgroud)

每个顺序的sequence_numbers的计数是可变的(高达10,低至2).我将为X个订单执行此操作.由此,我将进行进一步的处理,但获得这些配对本身令我感到困惑.我不需要结果集中的order_id或序列号.

这里需要递归CTE吗?游标也许?或者也许使用枢轴?我刚刚进行了头脑风暴和研究,但我对其中任何一个都没有太多经验,可以使用一些方向.

使用SQL Server 2008

sql t-sql sql-server sql-server-2008

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

SQL查询间歇性地不返回任何结果

我有一个非常直接的选择查询,如下所示:

SELECT * FROM PWCWarehouse (nolock) WHERE PWCWarehouseID = 4

这个查询被大量调用,并且大多数时候它返回记录就好了,但偶尔也没有返回任何内容,即使记录仍然存在.这可能是什么原因?可能是因为正在更新记录的其他进程锁定?我一直在尝试不同的隔离级别,目前有隔离级别= RepeatableRead,以便可以读取易失性数据?

此表中只有6条记录,它们永远不会增加或减少,此表上的唯一操作是上面的读取和更新.

有什么想法在这里发生了什么?

sql sql-server

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

不能阻止Mysql

我想停止mysql以便在救援模式下启动它以检索我的mysql密码但它显示我的错误信息并且不会停止.

service mysql stop
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

停止:拒绝发送消息,1个匹配的规则; type ="method_call",sender =":1.131"(uid = 1000 pid = 7640 comm ="stop mysql")interface ="com.ubuntu.Upstart0_6.Job"member ="Stop"error name ="(unset)" requested_reply ="0"destination ="com.ubuntu.Upstart"(uid = 0 pid = 1 comm ="/ sbin/init")

输出

etc/init.d/mysql停止

而不是通过/etc/init.d调用init脚本,而是使用service(8)实用程序,例如service mysql stop

由于您尝试调用的脚本已转换为Upstart作业,因此您还可以使用stop(8)实用程序,例如stop mysql stop:拒绝发送消息,1个匹配的规则; type ="method_call",sender =":1.129"(uid = 1000 pid = 7246 comm ="stop mysql")interface ="com.ubuntu.Upstart0_6.Job"member ="Stop"error name ="(unset)" requested_reply ="0"destination ="com.ubuntu.Upstart"(uid = 0 pid = 1 comm ="/ sbin/init")subhransu @ subhransu-Inspiron-1545:〜$ service mysql stop stop:拒绝发送消息,1匹配规则; type ="method_call",sender =":1.130"(uid = 1000 pid = 7400 …

mysql

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