我正试图从一张小桌子中随机抽取10%的样本.我以为我只是使用RAND()函数并选择随机数小于0.10的那些行:
SELECT * FROM SomeTable
WHERE SomeColumn='SomeCondition' AND
RAND() < 0.10
Run Code Online (Sandbox Code Playgroud)
但我很快发现RAND()总是返回相同的数字!让我想起这个xkcd卡通片.

没问题,RAND函数采用种子值.我将定期运行此查询,如果我在不同的日子运行它,我希望它给出不同的结果,所以我使用日期和唯一行ID的组合来播种它:
SELECT * FROM SomeTable
WHERE SomeColumn='SomeCondition' AND
RAND(CAST(GETDATE) AS INTEGER) + RowID) < 0.10
Run Code Online (Sandbox Code Playgroud)
我还是没有得到任何结果!当我显示RAND返回的随机数时,我发现它们都在一个狭窄的范围内.从RAND获取随机数似乎需要您使用随机种子.如果我首先有一个随机种子,我就不需要随机数!
我已经看到之前有关此问题的讨论:
他们没帮我.TABLESAMPLE在页面级别工作,这适用于大表,但不适用于小表,并且看起来它适用于WHERE子句之前.TOP with NEWID不起作用,因为我不知道我想要多少行.
任何人都有解决方案,或者至少有一个提示?
编辑:感谢AlexCuse提供适用于我的特定案例的解决方案.现在更大的问题,如何使兰德表现?
以下代码适用于gcc版本2.9到4.4,但不适用于版本4.5:
struct Pass {
};
int main(void){
Pass **passes = new ( Pass (*[ 10 ]) );
}
Run Code Online (Sandbox Code Playgroud)
gcc 4.5的具体错误消息是:
prob.cc: In function ‘int main()’:
prob.cc:6:31: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x
prob.cc:6:38: error: no matching function for call to ‘Pass::Pass(void (&)())’
prob.cc:2:1: note: candidates are: Pass::Pass()
prob.cc:2:1: note: Pass::Pass(const Pass&)
Run Code Online (Sandbox Code Playgroud)
添加请求的标志会使初始警告无效,但不能解决问题.有人可以解释如何解决这个问题吗?这是我正在维护的一些不起眼的C++代码,我只知道有限数量的C++.
我需要将下面的c#代码更改为c ++代码.
public static byte[] StrToByteArray(string str)
{
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
}
Run Code Online (Sandbox Code Playgroud)
在这个网站上,我找到了UTF8Encoding的c ++代码,我从中创建了这段代码
void StrToByteArray(string unicodeString)
{
UTF8Encoding^ utf8 = gcnew UTF8Encoding;
array<Byte>^encodedBytes = utf8->GetBytes( unicodeString );
}
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误
错误2错误C2664:'cli :: array ^ System :: Text :: Encoding :: GetBytes(cli :: array ^)':无法将参数1从'std :: string'转换为'cli :: array
为什么它会在与文档相同的情况下执行此操作?(除了我使用普通字符串,但使用顶级字符串^给我一个错误.)
我不确定它是否相关但我的代码是管理的.
注意:我还没有担心返回任何数据,直到我得到这个工作.
如果我继承了具有相同名称但来自不同基类的不同签名的函数,则尝试调用该函数会生成错误,声称该调用不明确.单个基类中的相同函数不会生成错误.为什么是这样?
第一个案例,http://ideone.com/calH4Q
#include <iostream>
using namespace std;
struct Base1
{
void Foo(double param)
{
cout << "Base1::Foo(double)" << endl;
}
};
struct Base2
{
void Foo(int param)
{
cout << "Base2::Foo(int)" << endl;
}
};
struct Derived : public Base1, public Base2
{
};
int main(int argc, char **argv)
{
Derived d;
d.Foo(1.2);
return 1;
}
prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:27:7: error: request for member ‘Foo’ is ambiguous
prog.cpp:14:10: error: candidates are: void Base2::Foo(int)
prog.cpp:6:10: error: void …Run Code Online (Sandbox Code Playgroud) 我一直认为标准需要非专业模板std::equal_to<T>才能调用T::operator==,但我注意到cppreference.com上的描述几乎意味着它是另一种方式; 当然它没有提到它作为一项要求.我还检查了C++ 11草案标准N3337,但也找不到任何保证.
如果您创建一个类,operator==您希望它可以在所有情况下使用.
我不能老实地想到一种实现方式不会这样做std::equal_to,但我错过了什么?
通常,如果您有二维数据结构,它是两个容器的组合 - 列表列表或字典字典.如果您想制作单个集合但是在二维中工作,该怎么办?
代替:
collection[y][x]
Run Code Online (Sandbox Code Playgroud)
做:
collection[x,y]
Run Code Online (Sandbox Code Playgroud)
我知道这是可能的,因为该PIL Image.load函数返回一个以这种方式工作的对象.
该os.walk函数返回目录和文件的单独列表.许多常见操作系统(如Windows和Linux)上的底层OS调用返回一个文件类型或标志,指定每个目录条目是文件还是目录; 如果没有此标志,则必须再次为每个返回的文件名查询操作系统.代码是否os.walk利用这些信息或将其丢弃os.listdir?
我认为标题是不言自明的,但更好的格式.
难道sizeof(unsigned char)还保证是1?
我不相信这个问题是重复的,因为:
...It was originally designed as an extension to C, and keeps a similar syntax, but is now a completely different language....char可以是签名或未签名.除非你得到标准的保证,否则没有理由假设sizeof(unsigned char)== sizeof(char)因此问题.c++ ×5
python ×3
ambiguous ×1
c++11 ×1
directory ×1
encoding ×1
gcc ×1
indexing ×1
managed-c++ ×1
new-operator ×1
optimization ×1
png ×1
random ×1
sizeof ×1
sql ×1
sql-server ×1
std ×1
utf-8 ×1